【Python】阶乘约数

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

定义阶乘 : n!=1×2×3×⋅⋅⋅×n。

请问 100! (100 的阶乘)有多少个正约数。

运行限制

最大运行时间:1s
最大运行内存: 128M

代码

"""
    对于任意一个正整数N,可以分解为若干个质数乘积的形式,
    即:N=(p1**r1)*(p2**r2)*...*(pn**rn),pn是素数
        N的正约数集合:{(p1**b1)*...*(pn**bn)}, 0<=bn<=rn
        N的正约数的个数:(r1+1)*(r2+1)*...*(rn+1)

    对于 N!的正约数集合和个数,可以分别求出1-N的每一个数的(p1**r1)*...*(pn**rn),
    然后将这些pn相乘。

    对N质因数分解可以使用辗转相除法实现
"""

prim = [] # 用于存储1-N的每一个数质因数分解产生的质数

def divide(num):
    """对num分解质因数"""
    i = 2
    while(num>1):
        if num % i == 0:
            prim.append(i)
            num //= i
        else:
            i+=1

for i in range(2,101):
    divide(i)

pset = set(prim)

ans = 1

for i in pset:
    ans *= (prim.count(i)+1)

print(ans)

    """"39001250856960000"""

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