快速指数算法

2019-04-14 15:54发布

一般地,求am可如下进行(其中,a、m是正整数):
将m表示为二进制形式bk2k+bk12k1++b12+b0
因此
am=((((abk)2abk1)2abk2)2ab1)2ab0 可得以下快速指数算法: c=0;//c是指数的部分结果,终值为指数m d=1;//d是中间结果,终值为所求结果 for(int i=k;i>=0;i--) { c=2*c; d=(d*d)mod n; if(bi==1) { c=c+1; d=(d*a)mod n; } } return d; LL QuickPower(LL x,LL y) { LL re; for(re=1;y;y=y/2,x=x*x%md) if(y&1) re=re*x%md; return re; }