Math 因式和mod p

Math 因式和mod p,math,optimization,Math,Optimization,我想知道从1计算阶乘和的最快方法是什么!到n!,mod a素数p是。我当前的代码只是保持一个运行的阶乘,然后在每次乘法后修改它。这是我的密码: ans = 1 fact = 1 for i in range(1, n+1): fact *= i fact %= mod ans += fact ans %= mod mod是要对其进行修改的素数,fact是一个阶乘的运行计算,ans将得到最终答案。我找到了各种算法来计算一个数mod p的阶乘,但不是阶乘和。提前感

我想知道从1计算阶乘和的最快方法是什么!到n!,mod a素数p是。我当前的代码只是保持一个运行的阶乘,然后在每次乘法后修改它。这是我的密码:

ans = 1

fact = 1
for i in range(1, n+1):
    fact *= i
    fact %= mod
    ans += fact
    ans %= mod

mod是要对其进行修改的素数,fact是一个阶乘的运行计算,ans将得到最终答案。我找到了各种算法来计算一个数mod p的阶乘,但不是阶乘和。提前感谢您的帮助

对于小模值,您可以限制循环,因为所有阶乘
>=mod可以被
mod
整除:
对于范围内的i(1,min(mod,n+1)):
您的例程看起来非常好,并且在执行时间上只是线性的。您应该使用Mbo的建议来大大提高大型
p
的速度。您可以通过组合以下行来节省非常少的时间:
fact=fact*i%mod
ans=(ans+fact)%mod
。如果您经常执行此例程,您可以将其结果记录下来(存储在列表或字典中)。对于较小的模值,您可以限制循环,因为所有的阶乘
>=mod可以被
mod
整除:
对于范围内的i(1,min(mod,n+1)):
您的例程看起来非常好,并且在执行时间上只是线性的。您应该使用Mbo的建议来大大提高大型
p
的速度。您可以通过组合以下行来节省非常少的时间:
fact=fact*i%mod
ans=(ans+fact)%mod
。如果您经常执行此例程,您可以将其结果记录下来(存储在列表或字典中)。