完全数を判定する 【Javaのサンプルコード】
完全数を判定するプログラムです。
完全数は、自分自身を除く正の約数の和に等しくなる自然数のことです。
完全数の最初の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です。