蓝桥杯:阶乘约数————Python

题目
试题 C: 阶乘约数
本题总分:10 分

【问题描述】
定义阶乘 n! = 1 × 2 × 3 × · · · × n。
请问 100! (100 的阶乘)有多少个约数。

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


解题思路

  • 首先知道一个定理:就是一个数的约数个数就是它的不同质因数的个数 + 1 再连乘的结果数。

Code

#阶乘约数
n = 100
# 因为数不大,就用最普通的方法统计质数了。
p = [2]
for i in range(3, n + 1):
    j = 2
    while j < i:
        if i % j == 0: break
        j += 1
    else: p.append(i)
#print(p) # 2 3 5 7 ... 97(求出所有的质数。)
m = {
     }
for i in p: m[i] = 1 # 每个质数初始为 1,代表不选这个质数的可能。
for i in range(2, n + 1): # 遍历 [2, 100]
    x = i
    for j in p: # 遍历质数,将每个被乘数都质因数分解一下。
    # (比如 6 分解成 2*3 ,12 分解成 2*2*3)
        if j > x: break
        while x % j == 0:
            x //= j
            # 让对应的质数个数 + 1
            m[j] += 1
s = 1
# 所有质因子的个数相乘,就是约数个数了。
for i in m.values():
    s *= i
print(s)


Answer

  • 39001250856960000

你可能感兴趣的:(蓝桥杯,python)