1000 までの完全数を求める

C:\DATA\Java2\Dos>java Kanzen
完全数 : 6
完全数 : 28
完全数 : 496
 -- Press any key to exit (Input "c" to continue) --
メソッドとはC言語の関数と同じで、プログラムのステートメントをひとまとまりにする機能です。
このプログラムでは基本的な Method の使い方を説明します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして Kanzen.java の名前で保存して下さい。
        //★ 完全数を求める     前田 稔
        class Kanzen
        {
            public static void main(String args[])
            {   int n;
                for(n=2; n<1000; n++)
                    if (Test(n))    System.out.println("完全数 : " + n);
            }
    
            static boolean Test(int n)
            {   int i,k;
                for(k=0,i=n/2; i>0; i--)
                    if (n%i==0)   k+= i;
                if (n==k)  return true;
                return false; 
                //else   return false; 
            }
        }
        
  2. Kanzen.java をコンパイルして class オブジェクトを実行して下さい。
    コンパイルの詳細は Java を動かす を参照して下さい。
  3. ページ先頭の画面が表示されたら完成です。

プログラムの説明

完全数とは自分自身を除く約数の合計が自分と同じ値になる整数のことです。
例えば 6 の約数は 1,2,3 で、その合計は 1+2+3= 6 になり6は完全数です。
12 の約数は 1,2,3,4,6 で、その合計は 1+2+3+4+6= 16 で完全数ではありません。
完全数は以外に少なく 1000 以下の完全数は三個だけです。

  1. boolean は true(Yes) か false(No) の二値を取るデータ型で、nが完全数のときは true を、 完全数で無いときは false をリターンします。
        static boolean test(int n)
        {
        }
        
  2. n を割り切る整数の合計を k に求めます。
    k をゼロにクリアして、i を n/2 から 1 までループします。
    n が i で割り切れた時に i の値を k に加えます。
        for(k=0,i=n/2; i>0; i--)
            if (n%i==0)   k+= i;
        
  3. ループから抜け出したとき n と k が等しければ完全数なので true をリターンします。
    if に対する else はあっても無くても同じことです。
        if (n==k)  return true;
        return false; 
        //else   return false; 
        
  4. 比較式の結果は true または false になるので、次のように比較結果を直接リターンするすることもできます。
        return (n==k);
        
  5. Method(Test) を呼び出すコードです。
    true(Yes) が返されたとき、nを完全数として表示します。
    boolean 型は if (Test(n)) のように比較演算子は必要ありません。
            if (Test(n))    System.out.println("完全数 : " + n);
        

【演習】

もっと大きな完全数を調べて下さい。
今まで見つかっているのは偶数だけで、奇数の完全数は見つかっていません。
もし見つけることが出来たら一躍有名になるかも知れません。

超初心者のプログラム入門(Java2)