1

如何使用“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");
        }
    }
}
4

2 回答 2

4

您确定代码实际终止了吗?我看不出实际计算有什么问题,但它的效率非常低,所以如果你只得到 2 个数字,那可能是因为你在程序到达第三个数字之前就停止了它。如果您想知道,它是 33550336,它远低于您设置的循环限制。

于 2012-07-01T19:22:58.147 回答
4

计算第三个完美数只需要很长时间。下一个完美数之后812833550336。现在考虑您的代码通过计算每个整数的每个除数来测试之间的每个整数。8128 ... 33550336

还要考虑下一个完美数,33550336是您可以用 java 表示的最大完美数intInteger.MAX_VALUE是 (2^31 - 1)。你会得到更多long-Long.MAX_VALUE是 (2^63 - 1) - 但你会等待很长时间才能获得第 8 个完美数字。

请注意,您只需要考虑直到 的平方根的number除数,然后在平方根以上找到它们的匹配除数,但即便如此,您仍然需要等待很长时间才能获得下一个完美数字。

于 2012-07-01T19:23:16.327 回答