Montgomery蒙哥马利算法:
主要解决求a^b % p的问题,当b很大的时候,int64类型也无法保存,并且速度很慢,本算法能够快速计算出结果。
int Montgomery(int a, int b, int p)
{
int N = 0;
int nRet = 1;
int nMaxBit = 0;
int nMax = 1;
// 获取b的最高有效位
while (nMax < b){
nMax <<= 1;
++nMaxBit;
}
// 求模
for (N = nMaxBit; N >= 0; --N){
nRet = (nRet * nRet) % p;
if (b & (1 << N)){
nRet = (nRet * a) % p;
}
}
return nRet;
}