我有一个代码,可以读取2个整数m和n,并打印出m和n(包括m和n)之间的所有perfect numbers。如果我输入2和7,它应该给我6。但是它给我13。怎么了?
parseInt()
答案 0 :(得分:2)
您正在使它变得比所需的复杂。您需要一个嵌套循环来解决此问题。遍历范围内的每个数字,将值x设置为等于0的值,每当找到一个均分的数字时,将其加到x上。如果在内循环的末尾x == i,那么您有一个理想数并将其打印出来。如果需要在列表中,请将其附加到列表中。您正在尝试保存所有中间数字,找到后只保存结果。
for i in range(m,n+1):
x = 0
for j in range(1,i):
if i % j == 0:
x += j
if i == x:
print(i)
答案 1 :(得分:0)
您想要做的就是这样。
将一个数字的所有除数期望数字本身加到一个列表中,然后检查该列表的总和是否等于该数字。如果相等,则打印数字,否则取下一个数字
m=int(input())
n=int(input())
for i in range(m,n+1):
myList=[]
for j in range(1,i):
if i%j==0:
myList.append(j)
if sum(myList)==i:
print(i)
输入
2
7
输出
6
答案 2 :(得分:0)
您应该迭代到n / 2,因为任何“数字”都不能被大于“数字”一半的任何数字整除。
for i in range(m, n+1):
_sum = 0
for j in range(1, int(i/2)+1):
if i%j==0:
_sum += j
if _sum==i:
print(i)
答案 3 :(得分:0)
m=int(input())
n=int(input())
'''
mylist =[] instead of using myList to keep track of factors
just use sum_of_factors_of_i variable and keep adding newly found factors to
it by doing so you will not need to loop over myList to get sum.
'''
for i in range(m,n+1):
sum_of_factors_of_i = 0
for j in range(1,i):
if i%j==0:
sum_of_factors_of_i += j
if sum_of_factors_of_i == i:
print(i)
'''
input
2
7
output
6
----------------------------------
input
2
30
output
6
28
'''