Algorithm 求某个数对N的互质模的修正阶乘N
给定两个数Algorithm 求某个数对N的互质模的修正阶乘N,algorithm,math,factorial,modular-arithmetic,Algorithm,Math,Factorial,Modular Arithmetic,给定两个数N和p,设k为p的最大幂,使得p^k除以N并让d=N/(p^k)。所以d和p是共同的 我如何找到d mod p?直接迭代将是不切实际的,因为N将非常高。需要更高效的算法来查找表达式。以下是O(N)算法: int d=1; for(int i=1;i<=N;++i) { d*=i; while(d%p==0) d/=p; d=d%p; } intd=1; 对于(int i=1;iMayI是PPrime)?我认为不能有一个有效的通用算法。考虑案例
N
和p
,设k
为p
的最大幂,使得p^k
除以N代码>并让d=N/(p^k)
。所以d
和p
是共同的
我如何找到d mod p
?直接迭代将是不切实际的,因为N当N
较高时,code>将非常高。需要更高效的算法来查找表达式。以下是O(N)算法:
int d=1;
for(int i=1;i<=N;++i)
{
d*=i;
while(d%p==0)
d/=p;
d=d%p;
}
intd=1;
对于(int i=1;iMayI是PPrime)?我认为不能有一个有效的通用算法。考虑案例<代码> p> n>代码> -那么,你不能比那些<代码> n>代码>乘法更好地找到<代码> d(=n!)mod p
。还有p
有多大?有什么限制吗?@us2012但是,即使你必须做所有的乘法,如果p是素数,你也只能存储余数模p
,避免因式分解后的超大数。@Boris是的,当然,但这适用于任何p
。