从书上学的东西(顺带总结一发)
标签: 有用的东西~(≧▽≦)/~啦啦啦
阅读体验:https://zybuluo.com/Junlier/note/1291765
数学一本通
各种求逆元
PS:掌握这两个就够了
费马小定理
笔者用的最多的(最容易记)
当\(p\)为质数时,\(x\)的逆元为\(x^{p-2}\mod p\)(只有p为质数时才可以用)
扩展欧几里德\(exgcd\)
\(exgcd\)本来是用来求 \(ax+by=c\) 的一组特解的
但由于逆元的定义:\(a*x \equiv1(\mod b)\)(\(x\)为\(a\)的逆元)
所以又可以转化成:\(ax+by=1\) 。。。这就是\(exgcd\)可以做的辣
再放一个\(exgcd\)的板子(总打错。。。)
//把c化为1了。。。
lst Exgcd(lst a,lst b,lst &x,lst &y)
{
if(!b){x=1,y=0;return a;}
lst ss=Exgcd(b,a%b,x,y);
lst t=x;
x=y,y=t-a/b*y;
return ss;
}
//直接背板子然后直接用,返回的值我也不想知道是什么
//反正特解在x里面了就行了。。。
中国剩余定理
用来求解方程组
\[ x\equiv B_1(\mod W_1) \]\[ x\equiv B_2(\mod W_2) \]\[…… \]\[ x\equiv B_n(\mod W_n) \]的唯一解\(x\)的算法(具体看书。。。)
lst CRT()
{
lst tot=1,Ans=0;
for(int i=1;i<=n;++i)tot*=W[i];
for(int i=1;i<=n;++i)
{
lst now=tot/W[i],x,y;
Exgcd(now,W[i],x,y);//这个看上面吧,函数就没必要再放一遍了
x=(x%W[i]+W[i])%W[i];//这个取膜貌似很关键诶
Ans=(Ans+Mult(Mult(x,now,tot),B[i],tot)+tot)%tot;
}return Ans>=0?Ans:Ans+tot;
}