题目:求a^n mod m
int pow_mod(int a,int n,int m){
int ans=1;
for(int i=0;iint)((longlong)ans*a%m);
}
分治法对上述代码改进如下:
(代码来自刘汝佳《算法竞赛入门经典》(第2版))
int pow_mod(int a,int n,int m){
if(n==0) return1;
int x=pow_mod(a,n/2,m);
longlong ans=(longlong)x*x % m;
if(n%2==1) ans=ans*a%m;
return (int)ans;
}
同余
a≡b(mod n)。含义是a mod n = b mod n
显然,如果a=b+kn,k是整数,那么a≡b(mod n)成立。a≡b(mod n)等价于a-b是n的整数倍。