算法 – n! modulo m,a ^ p modulo m

是否有更快的算法来计算(n!modulo m).

比每个乘法步骤的减少更快.

并且

是否有更快的算法来计算(a ^ p modulo m)比右 – 左二进制方法更好.

这是我的代码:
N! mod m

ans=1
for(int i=1;i<=n;i++)
    ans=(ans*i)%m;

a ^ p mod m

result=1;
while(p>0){
    if(p%2!=0)
        result=(result*a)%m;
    p=(p>>1);
    a=(a*a)%m;
}

最佳答案 现在a ^ n mod m是O(logn),它是
Modular Exponentiation算法.

现在换另一个,n! mod m,你提出的算法显然是O(n),所以显然第一种算法更快.

点赞