欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

并非盈数之和

程序员文章站 2024-03-21 20:20:34
...

项目场景:

完全数指的是真因子的和等于自身的数字,例如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)

思路分析:

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