完全数を判定する 【Javaのサンプルコード】

Print Friendly, PDF & Email

完全数を判定するプログラムです。

完全数は、自分自身を除く正の約数の和に等しくなる自然数のことです。

完全数の最初の3個、

6 (= 1 + 2 + 3)、

28 (= 1 + 2 + 4 + 7 + 14)、

496 (= 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248)

が有名ですね。

import java.util.Scanner;

public class PerfectNumber {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Input number please : ");
        int num = sc.nextInt();

        if (isPerfectNumber(num)) {
            System.out.println(num + " is a perfect number.");
        } else {
            System.out.println(num + " is not a perfect number.");
        }
    }

    static boolean isPerfectNumber(int num) {
        int sum = 0;
        for (int i = 1; i <= num / 2; i++) {
            if (num % i == 0) {
                sum += i;
            }
        }
        return sum == num;
    }
}

こちらのサイト様を参考にさせていただきました。

ありがとうございます。

 

また、その応用で、全ての約数を表示させた上で、約数の個数を表示するプログラムです。

public class DivisorFactor {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Input number please : ");
        int num = sc.nextInt();

        System.out.println(num + " has " + numOfDivisor(num) + " divisor.");

    }

    static int numOfDivisor(int num) {
        int cnt = 0;
        for (int i = 1; i <= num; i++) {
            if (num % i == 0) {
                System.out.println(i);
                cnt ++;
            }
        }
        return cnt;
    }
}

    }
}

計算効率のより良いアルゴリズムは現在思案中です。

ちなみに1はすべての自然数の約数に含まれますので、1の約数は1です。