今回は完全数かどうかを判定するプログラムを作ってみたいと思います。
以前に素数判定プログラムは作ってみましたが、今回は完全数です!
ではまず完全数とは、というところからですね。
完全数とは、「nの約数において、n以外の約数の総和がnと等しい数のこと」となります。
例えば「6」。
6の約数は1,2,3,6の4つです。
6以外の約数を足してみると、1 + 2 + 3 = 6 となり、6は完全数であると言えます。
他にも28(1+2+4+7+14)や496(1+2+3+4+8+16+31+62+124+248)が完全数です。
これを判定するプログラムを作ってみます!
■PerfectNumber.java
import java.util.Scanner;
public class PerfectNumber {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("判定したい数 : ");
int num = sc.nextInt();
if(isPerfectNumber(num)) {
System.out.println("完全数です");
} else {
System.out.println("完全数ではありません");
}
}
static boolean isPerfectNumber(int num) {
int sum = 0;
for(int i = 1; i <= num / 2; i++) {
if(num % i == 0) {
sum += i;
}
}
if(sum == num) {
return true;
} else {
return false;
}
}
}
■解説
素数判定の時と同様、for文で1つずつ約数かどうか判定していきます。
約数である場合はsumに加算されます。
num自身を除けば、最大の約数はnumの半分より大きな数になることはあり得ません。
したがってnumを2で割った数まで確認すればよいでしょう。
その方が処理が軽くなります。
あとはnumと、num以外の約数の合計であるsumを比較すれば完全数かどうか判定することができます。