蒙格马利快速幂模算法: 将p按二进制写出来,应该很容易理解。r依次是1,2,4,8,16,32,……次幂的结果。当所在二进制的位为1时,k乘上r。最后返回k。 由x*y%z=(x%z)*y%z ,运算过程不停模m。 a^p%m: typedef __int64 BIGINT; BIGINT Montgomery(BIGINT a, BIGINT p, BIGINT m) { BIGINT r = a % m; BIGINT k = 1; while (p != 0) { if ((p & 1)!=0) //为奇数 { k = (k * r) % m; } r = (r * r) % m; p /= 2; } return k; }