【逆元】: 若 a*b=1(%p) 则a是b在%p意义下的逆元。 则在%p意义下 一个数 除以a就等价于乘b
两种求逆元方法:1、若p为质数时,则有性质则a^(p-1)=1(%p) 。 即a*a^(p-2)=1(%p)。 所以a的逆元就是a^(p-2)
2、exgcd(a,b,x,y) 可求 ax+by=c=gcd(a,b) 若a,b互质 则可求a%b下的逆元 (可以证明,扩展欧几里得 的运算过程 x,y不会超过max(a,b))
威尔逊定理: 当且仅当p为质数时,有 (p-1)! ≡ p-1 ≡ -1 (%p)
因为 1~ p-1 中,除了 1和p-1 , 其余的都能两两配对、互为逆元。
【欧拉定理】
对于互质的整数x,p,xφ(p) ≡ 1 (%p)
【广义欧拉定理】
对于任意整数x,p, 若n>=φ(p) ,则 xn ≡ xn%φ(p)+φ(p) (%p)。
对比普通欧拉定理,如x=3,p=6, 30=1, 31 = 32 = 33 = ... = 3
【Lucas定理】:{
求C(n,m)在%p下的值 (p是质数) —— Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p)
为什么要求 p是质数? 因为Lucas证明中 要用到 (1+a)^p=(1+a^p)(%p)这个p为质数才有的性质 因为x^p=x(%p)
}
实际上 求大组合数 真正用的是 求 n!%p 复杂度 是跟p的质因数分解有关的 p=ai^bi(1<=i<=k) 则复杂度应该是 ai^bi 的最大值
写了个模板贴这 。。虽然我不怎么用模板。。但是求大组合数是真心麻烦。。
夏令时记录
【中国剩余定理(孙子定理)】{
给出以下的一元线性同余方程组:
假设整数m1,m2, ... ,mn两两互质,则对任意的整数:a1,a2, ... ,an,方程组有解,并且通解可以用如下方式构造得到:
设
—— M
是整数m1,m2, ... ,mn的乘积 —— Mi是除了mi以外的n- 1个整数的乘积。
(在%mi下)
则同余方程组 的通解形式为
那么在模M的意义下,方程组只有一个解:
}
【BSGS & exBSGS】
求a^x = b (%p) gcd(a,p)=1
考虑分块,设S=sqrt(p),
a^(kS-t) = b
然后预处理 b* a^t ,再暴枚k,求得x
exBSGS: 针对 gcd(a,p)≠1
a^x = b (%p)
a * a^(x-1) =b (%p)
[d = gcd(a,p)]
(a/d) * a^(x-1) = (b/d) ( %(p/d) )
然后递归子问题