javaの課題で素因数分解するプログラムを作ってこい!って言われる人も多いと思います。
私も学生の時は言われました。
でも、分からない人も結構いると思います。
だから、ここでは素因数分解するプログラムについてできるだけ簡単に解説していこうと思います。
キーボード入力で数値を変えたい人はこちらの記事をご覧ください。
ソースコード
public class prime_factorization {
public static void main(String[] args) {
int num = 2489;
System.out.print(num+"=");
for (int i = 2;i<=num;i++) {
if (num % i == 0) {
num /= i;
if (num == 1) System.out.print(i);
else System.out.print(i + "×");
i = 1;
}
}
}
実行結果
C:\Users\kotar\Desktop\Java\jdk1.8.0_162\program>java soinsuubunkai
2489=19×131
解説
まず素因数分解とはどんなことをすれば良いのかから始めます。
素因数分解は、
正の整数を素数の積の形で表すことです。
素因数分解にプログラムを組もうと思ったら、
上のことに注意しなければなりません。
では、プログラムについて解説していきます。
まず、num=2489と値を設定していますが、ここの数字は適当でかまいません。
ここで設定した数値を素因数分解していきます。
次に、
System.out.print(num+"=");
としていますが、これは出力するためのものです。
これで、画面に 「2489=」と表示されます。
で、ここからがメインの素因数分解していくところです。
for (int i = 2;i<=num;i++) {
For文の初期値が2なのは素数は2以上だからです。
if (num % i == 0) {
ここは i の数値が素数かどうか判定しています。
割り切れれば i は素数。
割り切れなければ素数ではない。
num /= i;
素数だった場合は i で割って、その結果からまた素数を探していきます。
if (num == 1) System.out.print(i);
else System.out.print(i + "×");
ここは、numの数値が1だった時は数字だけ出力、
それ以外の時は数字と×を表示させています。
こうしないと、最後の結果が
2489=19×131×
となってしまいます。
だから、最後の数字だけ×を表示させないようにしているのです。
i = 1;
ここで、i の数値を1に戻します。
2にしないのは、For文の仕様のせいです。
For文は処理が終わると i に1プラスしてまた繰り返します。
だから、ここで i=2にしてしまうと、
次は3から素数を探してしまうのです。
だから、i=1にします。
また、ここで i を戻さない場合問題が発生します。
例えば、8の素因数分解をしようとした時に、
2という素数を見つけた後、次は3以上の素数を探そうとしてしまうのです。
そうすると結果が
8=2×4
となってしまいます。
こうならないように1に戻します。
最後に、アンケートにご協力ください。今後の参考にさせていただきます。