并非盈数之和
程序员文章站
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=[]# 保存1到28123之间的盈数
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)
思路分析:
一开始看到这道题的时候我是没有头绪的,也不是说不知道怎么完成,只是因为这个循环次数简直大到没边,事实也证明了,这个循环时间我甚至能起身倒杯水喝。但这道题的解法就是这样简单暴力,只要逻辑正确,多等一会儿答案就会出现了。