前几天gryz组织我们听了几天数论,蒟蒻 Nanjo_Qi 自然是听得一点问题也没有。

于是只能自己yy着学一点其他的数学的东西,正巧在那之前刚刚学会卢卡斯定理,于是现在就来水一篇博客。

其实是不想做题了。正巧机房装修,吵的一批。

卢卡斯(Lucas)定理是什么?

他是用来求组合数 C(n, m) % p 值的定理,这里的p是素数。所以,它是一个解决大组合数求模的算法。所以看起来还是很有用的感觉。

 

为了给以后的学习做铺垫,我们先来了解一下乘法逆元:

逆元是指一个可以取消另一给定元素运算的元素,例如加法中的加法逆元和乘法中的倒数。

而一个数关于模p意义下的逆元可以利用快速幂,扩展欧几里得算法等求得:

已知(a, p) = 1,则 ap-1 ≡ 1 (mod p),  所以 a * ap-2 ≡ 1 (mod p) ,也就是 (m!(n-m)!) 的逆元为 (m!(n-m)!)p-2 

 1 typedef u64 long long;
 2 
 3 inline u64 Fast_Pow(u64 k, u64 b) {
 4     u64 ans = 1;
 5     while(b) {
 6         if( b&1 )  ans = ans * k % p;
 7         k = k * k % p, b >>= 1;
 8     }
 9     return ans;
10 }
乘法逆元

相关文章:

  • 2021-04-18
  • 2021-08-28
  • 2022-12-23
  • 2021-09-09
  • 2022-01-05
  • 2021-09-11
猜你喜欢
  • 2021-08-11
  • 2022-12-23
  • 2020-01-21
相关资源
相似解决方案