快速幂取模理论基础: 计算 a^b mod c ?
由(a x b) mod c=((a mod c) x b) mod c.
我们可以将 b先表示成就:
b=at2^t+at-1 2^t-1+……a02^0. (ai=[0,1]).
这样我们由 a^b mod c=(a^(at2^t+at-12^t-1+…a02^0)mod c.
然而我们求 a^(2^(i+1))mod c=((a^(2^i))mod c)^2 mod c .求得。
快速幂取余的程序:
long long BigMod(long long a,long long p,long long m) //a^p%m
{
if (a==0 || m==1)
return 0;
if (p==0)
return 1;
if (p%2)
return ((a%m)*BigMod(a,p-1,m))%m;
long long tmp=BigMod(a,p/2,m);
return (tmp*tmp)%m;
}