zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【思特奇杯·云上蓝桥-算法训练营】第1周:阶乘约数

算法 蓝桥 云上 阶乘 训练营 约数
2023-09-14 09:01:26 时间

Question

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

Idea

任意一个正整数 X 都可以表示成若干个质数乘积的形式,即 X = p1α1 ∗ p2α2 …… ∗ pkαk 约数个数 = (a1 + 1)(a2 + 1)……(ak + 1)

Code

def FactorialDivisor():
    p = [0 for i in range(101)]
    for i in range(2,101):
        n = i
        j = 2
        for j in range(2,int(n / j) + 1):
            while n % j == 0:
                p[j] += 1
                n = int(n / j)
        if n > 1:
            p[n] += 1
 
    ans = 1
    for i in range(2, 101):
        if p[i]:
            ans *= (p[i] + 1)
 
    print(ans)

FactorialDivisor()