题目
如果一个整数等于其所有真因子之和,则该数字称为完数。例如,6=1+2+3,输入整数区间,输出区间(含边界)内所有的完数。不考虑0,负数或者其他特殊情况。
格式
输入格式:
输入为整型,空格分隔
输出格式:
输出为整型,空格分隔
样例1
输入:
1 500
输出:
6 28 496
解题思路(优化)
- 常规判断,需要注意尽可能减少无关紧要的循环,所以我们可以在 因子的判断 中出发。
- 如果找到前面一个因子,那么它对应的另一个因子就直接得出了,如:50 = 5*10;循环判断到5时,直接可以用50/5 =10求出另一个因子,所以可以减少一半的循环。
程序
def zhenyinzi(x):
f = False
sum =0
bian =int(x**(0.5))
# sum+= i+ (x/i)减少了一半的循环时间
for i in range(1,bian+1):
if x%i==0:
sum+=i+x/i
if sum-x ==x and x!=1:
f =True
return f
def main():
#code here
n,m = map(int,input().split())
for i in range(n,m+1):
if zhenyinzi(i):
print("%d"%i,end=" ")
pass
if __name__ == '__main__':
main();