-2

私は仕事を成し遂げようとしています。1から10000までの4つの完全数を印刷します。

数論では、完全数は、適切な正の約数の合計、つまり、数自体を除いた正の約数の合計に等しい正の整数です。

これが私のコードです:

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

私のコードの何が問題になっていますか?ありがとうございました。

4

2 に答える 2

8

チェックはループのif (sum == number)外側で行う必要があります。それ以外の場合は、除数のサブセットの合計が数値と等しくなるような数値を取得する可能性があります。

実際、24はそのような例の1つ1+2+3+4+6+8=24です。あなたのコードは、24は12で割り切れますが、24は完璧であると時期尚早に結論付けています。

于 2012-12-10T16:49:16.770 に答える
2

i = 8としてループをステップスルーすると、すべての数値の合計が1 + 2 + 3 + 4 + 6 + 8 = 24になり、条件が満たされるため、コードは24を出力します。合計がまだ完了していないときに印刷されないように、印刷に別の条件を追加する必要があります。この場合、計算を有効にするためにまだ12を追加していません。

ifステートメントをwhileループの外に移動して、合計が計算された後にのみチェックされるようにします。

于 2012-12-10T16:54:34.727 に答える