题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
定义阶乘 n! = 1 × 2 × 3 × · · · × n。
请问 100!(100 的阶乘)有多少个正约数。
解答:
这道题考的其实是数学知识,即某个数的所有约数,先求出这个数的所有质因子,然后每个质因子需要多少个,即while n%(质因子)==0:该质因子的个数加一(count+=1)。求出所有质因子所需的个数,将所有的质因子的个数加一,再进行相乘,即可得出约束的个数。
n = 100
a=[2]
#因为题目要求是求出1到100的阶乘的约数个数,所以先求出1到100中的质因数,放到a数组中
for i in range(3,n+1):
j = 2
while j<i:
if i%j==0:break#如果不是质数则返回,不计入a数组中
j+=1
else:#while~~else语句,如果该数只有1和它自己这两个因子,则加入a数组中
a.append(i)
m = {}
for i in a:
m[i]=1 #将a中存放的因子放到m字典中,并把初值赋值为1
for i in range(2,n+1):
x=i
for j in a:
if j>x:break
while x%j==0:#计算该因子的个数,因为初值为1,所以这里m[j]为该因子的个数加一
x = x//j
m[j] += 1
num=1
for i in m.values():#即每个质数的个数加一之后相乘
num *= i #这里的i为该因子的个数加一,因为再赋初值的时候已经加一
print(num)