1. 程式人生 > 實用技巧 >Martyr2專案實現——Number部分問題求解(3) Prime Factorization

Martyr2專案實現——Number部分問題求解(3) Prime Factorization

Martyr2專案實現——Number部分問題求解(3) Prime Factorization

質因子分解

問題描述:

Prime Factorization – Have the user enter a number and find all Prime Factors (if there are any) and display them.

翻譯:

質因子分解:給定一個整數N,找到並輸出他的全部質因子

原理:

質因數分解,是將一個正整數寫成幾個約數的成績,並且這些約數都是質數

給定一個合數n(這裡,n是待分解的正整數),試除法看成是用小於等於\(\sqrt{n}\)的每個素數去試除待分解的整數。如果找到一個數能夠整除除盡,這個數就是待分解整數的因子。試除法一定能夠找到n

的因子。因為它檢查n的所有可能的因子,所以如果這個演算法“失敗”,也就證明了n是個素數(參考wikipedia:試除法

演算法實現:

public static ArrayList<Long> PrimeFactor(long N){ //使用短除法來找到一個合數的全部質因子
    long k = (long)Math.sqrt(N);
    ArrayList<Long> list = new ArrayList<>();
    for(long i=2;i<=k;i++) {
        while (N % i == 0) {
            list.add(i);
            N /= i;
        }
    }
    if(N!=1) list.add(N);
    return list; //返回質因子構成的列表
}