找到修改后的阶乘N模数为N的一些数字互质

时间:2013-03-09 10:26:16

标签: algorithm math factorial modular-arithmetic

如果有两个数字Np,则k应为p的最大功率,以便p^kN!并让d = N!/(p^k) {1}}。因此dp是互质的。

如何找到 d mod p ?直接迭代将是不切实际的,因为当N!高时N将非常高。找到表达式需要更有效的算法。

1 个答案:

答案 0 :(得分:1)

这是O(N)算法:

int d=1;
for(int i=1;i<=N;++i)
{
    d*=i;
    while(d%p==0)
      d/=p;
    d=d%p;
}

它不需要存储大量数字,因此可以接受。我怀疑O(p)算法是可能的(因为数字会在每个k * p之后重复),但代码会更复杂。