我已经阅读了很多很好的算法来计算 n!mod m 但它们通常在 m 为 prime 时有效。我想知道当 m 不是素数时是否存在一些好的算法。如果有人也可以编写算法的基本功能,我会很有帮助。我一直在使用
long long factMOD(long long n,long long mod)
{
long long res = 1;
while (n > 0)
{
for (long long i=2, m=n%mod; i<=m; i++)
res = (res * i) % mod;
if ((n/=mod)%2 > 0)
res = mod - res;
}
return res;
}
但是当我尝试打印 factMOD(4,3) 时得到错误的答案。这个算法的来源是:
http ://comeoncodeon.wordpress.com/category/algorithm/