【问题标题】:Perfect numbers. Something wrong完美的数字。有问题
【发布时间】:2012-12-11 00:54:34
【问题描述】:

我正在尝试完成一项任务。打印 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

我的代码有什么问题?谢谢。

【问题讨论】:

  • 缺少的部分是完美数的定义。在数论中,一个完美数是一个正整数,它等于它的适当正因数之和,即不包括数字本身的它的正因数之和。例如,1 + 2 + 3 = 6;

标签: java perfect-numbers


【解决方案1】:

if (sum == number) 检查需要在循环外进行。否则,您可能会选择除数的 子集 之和等于该数字的数字。

事实上,自1+2+3+4+6+8=24 以来,24 就是一个这样的例子。您的代码过早地断定 24 是完美的,尽管它也可以被 12 整除。

【讨论】:

    【解决方案2】:

    您的代码打印 24 是因为当您以 i = 8 单步执行循环时,所有数字的总和为 1+2+3+4+6+8 = 24,因此您的条件得到满足。您需要在打印中添加另一个条件,以防止在求和尚未完成时打印。在这种情况下,您尚未添加 12 以使计算有效。

    我会将 if 语句移到 while 循环之外,以便仅在计算总和后检查它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多