2022.07.06
完全数
はじめに
完全数とは、その数字自身を除く約数の和がその数字自身に等しい自然数のことです。ピタゴラスが名づけた数の1つです。
完全数の例です。
6=1+2+3
28=1+2+4+7+14
Javaソースコード
PerfectNumber.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033
public class PerfectNumber { // 完全数かを判定するメソッド private static boolean isPerfectNumber( int n ) { // 2未満は完全数ではない if ( 2 > n ) return false; // 和を計算 int sum = 0; for ( int i = 1; i <= n / 2; i ++ ) { if ( 0 == ( n % i ) ) sum += i; } // 判定 // 和sumと元の値nが不一致なので完全数である if ( sum == n ) return true; // 和sumと元の値nが不一致なので完全数ではない return false; } // メイン public static void main( String[] args ) { // 2から10000の範囲で、完全数を見つける for ( int i = 2; i <= 10000; i ++ ) { if ( isPerfectNumber( i ) ) System.out.println( i ); } } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis PerfectNumber.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac PerfectNumber.java
実行
C:\talavax\javasample>java PerfectNumber
実行結果
6 28 496 8128
Javaソースコードの解説
ここからは、このソースコードを上から順番に解説していきます。
001
public class PerfectNumber {
クラス名を、PerfectNumberとしています。
002 003 004
// 完全数かを判定するメソッド private static boolean isPerfectNumber( int n ) {
005 006
// 2未満は完全数ではない
if ( 2 > n ) return false;
008 009
// 和を計算 int sum = 0;
和を格納する変数sumに0を代入しています。
010 011
for ( int i = 1; i <= n / 2; i ++ ) {
012 013
if ( 0 == ( n % i ) ) sum += i;
016 017 018
// 判定 // 和sumと元の値nが不一致なので完全数である if ( sum == n ) return true;
020 021
// 和sumと元の値nが不一致なので完全数ではない return false;
このmainメソッドからプログラムを実行します。
024 025
// メイン public static void main( String[] args ) {
標準入力System.inを使って、Scannerクラスのscanを初期化しています。
026 027 028 029 030 031
// 2から10000の範囲で、完全数を見つける for ( int i = 2; i <= 10000; i ++ ) { if ( isPerfectNumber( i ) ) System.out.println( i ); }
以上です。
関連コンテンツ
割り算で「割り切れる」、「割り切れない」ってどういうこと?