并非盈数之和

项目场景:

完全数指的是真因子的和等于自身的数字,例如28=14+7+4+2+1,如果真因子的和小于自身,就是亏数,如果大于,就是盈数。


问题描述:

已知12是最小的盈数,所以最小的能够表示为两个盈数之和的数字是24,由数学分析得到,大于28123的任何正整数都能表示成两个盈数的和,找出所有不能被写成两个盈数之和的正整数,求它们的和,代码如下:

def mi(x:int):# 判断数字是不是盈数的函数
    sum=0
    for i in range(1,x):
        if x%i==0:
            sum+=i
    return sum>x
result=[]# 保存128123之间的盈数
final=[]# 保存result中任意两个盈数的和
end=0# 保存最终结果
for i in range(1,28123):
    if mi(i):
        result.append(i)
for i in result:
    for j in result:
        if i+j<=28123:# 因为大于28123之后的数字都可以表示为两个盈数之和,所以我们只需要小于等于28123的部分
            final.append(i+j)
final=set(final)# 去除重复元素
for i in range(1,28123):# 如果一个数字不在final里,这个数字就不能表示为两个盈数之和
    if i not in final:
        end+=i
print(end)

思路分析:

一开始看到这道题的时候我是没有头绪的,也不是说不知道怎么完成,只是因为这个循环次数简直大到没边,事实也证明了,这个循环时间我甚至能起身倒杯水喝。但这道题的解法就是这样简单暴力,只要逻辑正确,多等一会儿答案就会出现了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值