package j1.lesson08;
import java.io.*;
/**
* 課題0804 - 解答例.
* @author s.arakawa
* @version $Id: PrimeFactors_java.rps,v 1.1 2006/03/06 12:56:14 java2005 Exp $
*/
public class PrimeFactors {
/**
* コンソールから <code>2</code> 以上の整数を入力させ、その素因数を小さい順に全て列挙するプログラム。
* <code>2</code> 未満の値が入力された場合は <code>2以上の整数を入力してください</code> と表示する。
* 表示する素因数に重複がある場合、連続して出力すること。
* @param args 無視される
* @throws IOException 入力時に例外が発生した場合
*/
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("2以上の整数を入力:");
int input = Integer.parseInt(reader.readLine());
// 2未満ならメッセージを出力して終了
if (input < 2) {
System.out.println("2以上の整数を入力してください");
return;
}
// 1 になる (素因数がなくなる) まで繰り返す
while (input != 1) {
// 最も小さい素因数を取り出し表示する
int mpf = minimumPrimeFactorOf(input);
System.out.print(mpf + " ");
// 分解したので自分自身を素因数で割る
input /= mpf;
// これが 1 になるまで繰り返す
}
}
/**
* 与えられた引数 <code>n</code> に対して、その <code>1</code> を除く最小の約数を返す。
* <code>n</code> が <code>1</code> の場合は <code>1</code> を返す。
* <code>n</code> が <code>1</code> 未満の場合は考慮しない。
* @param n 約数を計算される値
* @return 与えられた引数 <code>n</code> に対して、その <code>1</code> を除く最小の約数、または <code>1</code>
*/
public static int minimumPrimeFactorOf(int n) {
if (n == 1) {
return 1;
}
else {
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return i;
}
}
return n;
}
}
}
|