我正在努力完成一项任务。打印4 perfect numbers,介于1和10000之间。
在数论中,一个正数是一个正整数,等于其正确的除数之和,即除数除数之外的正除数之和。
这是我的代码:
public class PerfectNumbers
{
public static void main(String[] args)
{
// Perfect numbers!
for (int number = 1; number < 10000; number++)
{
int sum = 0;
int i = 1;
while (i < number)
{
if (number % i == 0)
{
sum += i;
i++;
}
else
{
i++;
continue;
}
if (sum == number)
{
System.out.println(number);
}
else
{
continue;
}
}
}
}
}
输出结果为:
6
24 <--- This one is wrong because next must be 28.
28
496
2016
8128
8190
我的代码有什么问题?谢谢。
答案 0 :(得分:8)
if (sum == number)
检查需要在循环外完成。否则,您可能会选择数字,使得除数的子集的总和等于该数。
事实上,24是自1+2+3+4+6+8=24
以来的一个这样的例子。你的代码过早地断定24是完美的,尽管它也可以被12整除。
答案 1 :(得分:2)
您的代码打印24,因为当您在i = 8时逐步执行循环时,所有数字的总和为1 + 2 + 3 + 4 + 6 + 8 = 24,因此您的条件得到满足。您需要在打印时添加另一个条件,以防止在尚未完成求和时打印。在这种情况下,您尚未添加12以使计算有效。
我会在while循环之外移动if语句,因此只有在计算完总和后才会检查它。