快速幂算法
任意一个数都可以写作质数的幂的积
6!=6x5x4x3x2x1=(2x3)x5x(2x2)x3x2=(2^4)x(3^2)x(5^1)
因此要做的就是:1.找到20以内所有质数;2.求出n!所对应的质数的幂;3.用快速幂求解
'''快速幂算法'''
def FastExponentiation(a,b):
ans=1
while b!=0:
if b%2==1:
ans=ans*a
b=b//2
a=a*a
return ans
while 1:
try:
n=int(input())
primen=[0 for i in range(8)]#存放[2,3,5,...,19]的幂次数
for i in range(1,n+1):
j=0
while i>=prime[j]:
if i %prime[j]==0:
primen[j]+=1
i=i//prime[j]
else:
j+=1
res=1
for i in range(8):
res=res*FastExponentiation(prime[i], primen[i])
print(res)
except:
break