证明:
得证
代码
int gcd(a,b) {
if(!b)return a;
return (b,a%b);
}
原理
裴蜀定理
以及
带入有
对比系数有
注意到 ax + 0y=gcd(a,0)=a 得x=1,y=0
void exgcd(a,b,int& x,int& y){
if(!b){
x=1,y=0;
return;
}
exgcd(b,a%b,y,x);
y = y - a/b *x;
}
若
即
得
inv[1]=1;
for(i in 1... ) {
inv[i]=(p-p/i)*inv[p%i] % p;
}
我们需要证明 。
设 是 在模 意义下的逆元,即 。
根据模运算的性质,有:
我们可以将 表示为 和 的线性组合:
设 是 在模 意义下的逆元,即:
将 的表达式代入 :
展开并整理:
由于 ,因此:
两边同时乘以 :
将 代入上式:
因此:
所以:
即:
得证。