除法取模(費馬小定理+擴充套件歐幾里得)
阿新 • • 發佈:2018-12-14
除法取模
以下只說這兩個方法
1)費馬小定理
a^(p-1)==1(mod)p a*a^(p-1)=1%M
a/b%mod=a*b^(mod-2)%mod;
只有p,mod為素數時,而一般都為素數。
b^(mod-2)一般用快速冪
typedef long long ll; ll quick_pow(ll a,ll n) { ll ans=1; while(n) { if(n&1) { ans*=a; ans%=mod;//mod自己設定 } a=a*a%mod; n>>=1; } return ans; }
2)擴充套件歐幾里得
求a/b%mod=a*b1%mod。b1為b得逆元。利用exgcd(b,mod,x,y);b1=x;由於可能為負所以x=(x+mod)%mod。
擴充套件歐幾里得模板
typedef long long ll;
ll e_gcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
ll ans=e_gcd(b,a%b,y,x);
y-=x*(a/b);
return ans;
}