2022/07/06 公開
・完全数
完全数とは、その数字自身を除く約数の和がその数字自身に等しい自然数のことです。ピタゴラスが名づけた数の1つです。
完全数の例です。
6=1+2+3
28=1+2+4+7+14
与えられた自然数Xを1からX/2までの整数で割っていき、余りが0の値の和を計算し、その値がXと等しければXは完全数となります。
以下は、完全数を見つけるJavaのソースコードで、2から10000の範囲で完全数を見つけるものです。
PerfectNumber.java ← クリックしてダウンロードページに移動001: public class PerfectNumber { 002: // 完全数かを判定するメソッド 003: private static boolean isPerfectNumber( int n ) 004: { 005: // 2未満は完全数ではない 006: if ( 2 > n ) return false; 007: 008: // 和を計算 009: int sum = 0; 010: for ( int i = 1; i <= n / 2; i ++ ) 011: { 012: if ( 0 == ( n % i ) ) 013: sum += i; 014: } 015: 016: // 判定 017: // 和sumと元の値nが不一致なので完全数である 018: if ( sum == n ) return true; 019: 020: // 和sumと元の値nが不一致なので完全数ではない 021: return false; 022: } 023: 024: // メイン 025: public static void main( String[] args ) { 026: // 2から10000の範囲で、完全数を見つける 027: for ( int i = 2; i <= 10000; i ++ ) 028: { 029: if ( isPerfectNumber( i ) ) 030: System.out.println( i ); 031: } 032: } 033: }
PerfectNumber実行
C:\talavax\javasample>java PerfectNumber
PerfectNumber.javaの出力結果
6 28 496 8128
ここからは、このソースコードを上から順番に解説していきます。
001: public class PerfectNumber {
クラス名を、PerfectNumberとしています。
002: // 完全数かを判定するメソッド 003: private static boolean isPerfectNumber( int n ) 004: {
指定した整数nが完全数かを判定するメソッドisPerfectNumberです。nの値が完全数の場合、このメソッドはtrueを戻します。
005: // 2未満は完全数ではない 006: if ( 2 > n ) return false;
指定した整数nが2未満の場合、和の計算をすることなくfalseを戻します。
008: // 和を計算 009: int sum = 0;
和を格納する変数sumに0を代入しています。
010: for ( int i = 1; i <= n / 2; i ++ ) 011: {
for文を使って、1からn/2のループを作っています。整数nはn/2より大きい数字で割り切れないので、n/2までのループにしています。
012: if ( 0 == ( n % i ) ) 013: sum += i;
整数nをiで割り、その余りが0の場合、変数sumにiを足しています。
016: // 判定 017: // 和sumと元の値nが不一致なので完全数である 018: if ( sum == n ) return true;
整数nとsumが同じであれば完全数なので、return文でtrueを戻します。
020: // 和sumと元の値nが不一致なので完全数ではない 021: return false;
整数nとsumが違えば完全数ではないので、return文でfalseを戻します。
このmainメソッドからプログラムを実行します。
024: // メイン 025: public static void main( String[] args ) {
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
026: // 2から10000の範囲で、完全数を見つける 027: for ( int i = 2; i <= 10000; i ++ ) 028: { 029: if ( isPerfectNumber( i ) ) 030: System.out.println( i ); 031: }
変数iを2から10000までのループを作成し、その値を完全数判定メソッドisPerfectNumberに渡しています。その結果、完全数と判定されたiをコンソール出力しています。
以上です。
■関連コンテンツ
return文 | メソッドの戻り値 |
値のコンソール表示 | print()、println()とは? |
Javaの変数 | Javaで扱う変数について解説 |
メソッド | メソッドについて解説 |
剰余(余り)計算剰余(余り)をを計算するプログラムの紹介と、その結果を表示する方法を解説 |
|
for文繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。 |
|
if文条件による処理の分岐に使用するif文について解説 |
|
計算結果の表示足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)の使い方を説明 |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |
■広告