fork(2) download
  1. class Kanzen
  2. {
  3.   public static void main(String args[])
  4.   { int n;
  5.     //2から1000までの数を順番にTest関数にわたし、完全数かどうかを判定させる
  6.     for(n=2; n<1000; n++){
  7.       //if(Test(n)) は、 if(Test(n)==true) という判定と同じ意味。
  8.       if (Test(n) == true){ ・・・①Test関数の結果がtrueだったら完全数である。
  9.         //完全数だったら出力する
  10.         System.out.println("完全数 : " + n);
  11.       }
  12.     }
  13.   }
  14.  
  15.   //完全数かどうかを判断する関数。 完全数だったらtrueを返却、そうでなければfalseを返却する
  16.   //完全数とはその数自身を除く約数の和が、その数自身と等しい自然数のことである。(wikipediaより引用)
  17.   //処理概要としては、渡された値から1までを順番に総当りでチェックし、剰余を求める。剰余が0の場合は割りきれる数である。
  18.   //割り切れた値を順番に加算し、総当りチェックが終わった時に加算した値と渡された値が同じ値だったら完全数であると判断する。
  19.   static boolean Test(int n)・・・② //nには①の処理で渡す引数が入るので、2~1000までが順番に渡される。
  20.   { int i; //iは、1~nまでの数を総当りでチェックするための変数。
  21.    int k; //kは、割り切れた数を加算していくための変数
  22.     //kを0で初期化しておく
  23.     k=0;
  24.     //n~1までの数を総当りで割り切れるかチェックする。剰余が0の場合は約数であり、0以外の場合は約数ではない。
  25.     //なお、8の約数は[1,2,4]。 6の約数は[1,2,3]のように、判定する数自身を2で割った数より大きな数は約数になることはないので、
  26.     //本当にn~1までの数を総当りで割り切れるかチェック必要はない。n/2からチェックを開始して無駄な処理を省略する。
  27.     for(i=n/2; i>0; i--){
  28.       if (n%i==0){
  29.         k+= i;  //剰余が0の場合は約数なので、加算していく
  30.       }
  31.     }
  32.     if (n==k){
  33.      return true;・・・③ //渡された値と、約数の合計がイコールだったら完全数なのでtrueを返却する
  34.     }
  35.     return false; ・・・④ //それ以外は完全数ではない。falseを返却する。
  36.   }
  37. }
  38.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty