蓝桥杯求100!的正约数

该博客介绍了如何不用暴力求解计算100!的正约数个数。通过分解1到100所有数的质因数,并统计每个质因数的出现次数,利用公式(n+1) * (m+1)计算每个质因数对约数个数的贡献,最终相乘得到总约数个数。博主提供了Python代码示例来实现这一过程,并得到了正确答案39001250856960000。
部署运行你感兴趣的模型镜像

蓝桥杯求100!的正约数

这个问题猛地一看好像不能用暴力求解,他就是不能用暴力求解,因为这个数太大了。

怎么解决

1、首先我们要把1*2*3…100的质因数全部求出来。

​ 用暴力求解去遍历1~100,每个数的质因数,然后存在一个result的全局列表中

2、在计算每个质因数出现的次数,这里我用的是字典存储每个数字出现的次数

这里涉及到一个计算公式
$$
整数=质因数n*质因数m

$$

整数的约数的个数=(n+1)∗(m+1) 整数的约数的个数=(n+1)*(m+1) =(n+1)(m+1)

例如
$$
12=223=2^2*3

12的约数的个数就是n 12的约数的个数就是n 12n
n=(2+1)*(1+1)
$$
他们分别是1,2,3,4,6,12

100!的代码

result = []  # 存取所有的质因数
dirct = {}  #存放质因数出现的次数


count = 1
def demo(n):#求解质因数的函数
    k = 2
    global result
    while n > 1:
        if n % k == 0:
            result.append(k)
            n = n / k
        else:
            k += 1

# 求解每个数的质因数
for i in range(2, 101):
    demo(i)
print(result)

# 记录每个质因数出现的次数
for i in result:
    if i not in dirct.keys():
        dirct[i] = 1
    else:
        dirct[i] += 1
print(dirct)#质因数出现的次数

# 计算约数出现的次数
for values in dirct.values():
    count *= (values + 1)

print(count)

以上内容仅供参考:

算出的答案:39001250856960000

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值