如何使用“for”循环查找28之后的前3个完美数字? 这是我正在使用的一些代码。
我似乎无法获得超过2个数字的任何内容。如果我尝试增加i <= 2000000000它会告诉我整数是大的。
public class JBaneling
{
public static void main(String args[])
{
System.out.println("3 nearest Perfect numbers after 29 ");
for (int i = 29; i <= 2000000000; i++) {
test1(i);
}
}
public static void test1(int number)
{
int sum = 0;
for(int divisor=1; divisor < number; divisor++)
{
if ((number % divisor) ==0)
{
sum = sum + divisor;
}
}
if(sum==number)
{
System.out.println(number + " is a perfect number");
}
}
}
答案 0 :(得分:4)
您确定代码实际终止了吗?我没有看到实际的计算有什么问题,但是效率非常低,所以如果你只得到2个数字,那可能是因为你在程序到达第三个数字之前就停止了。如果您想知道,它是33550336,这远低于您设置的循环限制。
答案 1 :(得分:4)
计算第三个完美数字只需要很长时间。在8128
之后,下一个完整数字为33550336
。现在考虑您的代码通过计算每个整数的每个除数来测试{{1>}之间的每个整数。
另外考虑下一个完美的数字,8128 ... 33550336
是您能够用java 33550336
表示的最大完整数字:int
是(2 ^ 31 - 1 )。一个Integer.MAX_VALUE
- long
是(2 ^ 63 - 1),你会得到更少的 - 但你会等待长第8个完美数字的时间。
请注意,你只需要考虑除Long.MAX_VALUE
的平方根之外的除数,然后在平方根之上找到它们的匹配除数,但即便如此,你仍然需要等待很长时间才能到达下一个完美的数字。