Javaプログラミング学習サイト ゆるゆるプログラミング

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文

繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。

条件による処理の分岐に使用するif文について解説-画像

if文

条件による処理の分岐に使用するif文について解説

四則演算(足し算/引き算/掛け算/割り算)について-画像

計算結果の表示

足し算(加法)/引き算(減法)/掛け算(乗法)/割り算(除法)の使い方を説明

■新着情報

2022.07.07 外部プログラムの実行 exeファイル実行
2022.07.06 完全数 6=1+2+3

■広告

 

 

 

 

 

スッキリわかるJava入門第3版 [ 中山清喬 ]

価格:2,860円
(2021/6/18 14:32時点)
感想(6件)

 

 

Topへ