求N!的因子个数
这道题是在2002蓝桥杯国赛python组看到的,本人参加时没做出来,回来上网查阅了资料才会做。
涉及知识
1.数论中的唯一分解定理
:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积.
2.若该可以表示为, N = p 1 a 1 + p 2 a 2 + . . . + p n a n N=p1^{a1}+p2^{a2}+...+pn^{an} N=p1a1+p2a2+...+pnan,则该质数的约数个数为 ( 1 + a 1 ) ∗ ( 1 + a 2 ) ∗ . . . ∗ ( 1 + a n ) (1+a1)*(1+a2)*...*(1+an) (1+a1)∗(1+a2)∗...∗(1+an)
思路
1.先把该阶乘分解为质数相乘,再利用公式求解约数个数
代码
"""
Author:Anderson
Date:2020-11-14
"""
import math
def isprime(x):#判断素数
for i in range(2,x):
if x%i==0:
return False
return True
def addprime(x):#获取[1,n+1]中的素数
primelist = []
for i in range(2,x+1):
if isprime(i):
primelist.append(i)
return primelist
def getindex(x):#获取每个素数的指数
indexlist=[0]*len(addprime(x))
for i in range(1,x+1):
for j in range(len(addprime(x))):
m=i
list=addprime(x)
while m % list[j]==0:
indexlist[j]+=1
m=m//list[j]
return indexlist
def num(x):#指数(1+a1)*..*(1+an)
sum=1
for i in getindex(x):
sum*=(1+i)
return sum