解答例 - j1.lesson08.PrimeFactors

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[] argsthrows 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;
        }
    }
}