如果有两个数字N
和p
,则k
应为p
的最大功率,以便p^k
除N!
并让d = N!/(p^k)
{1}}。因此d
和p
是互质的。
如何找到 d mod p
?直接迭代将是不切实际的,因为当N!
高时N
将非常高。找到表达式需要更有效的算法。
答案 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之后重复),但代码会更复杂。