1. 程式人生 > >演算法學習【10】尋找質因數的個數

演算法學習【10】尋找質因數的個數

題目如下:


       注意:最多隻有一個質因子大於sqrt(n),若有兩個這樣的質因子,則它們相乘>n,所以不存在。如果i+=1這樣不停相除尋找,只需要到剛大於sqrt(n)即可。

      可以時間換空間,儲存一部分小的常用質因子。

      大於2的偶數肯定不是質因子,可以 用j+=2尋找較大的質因子。

      程式碼:

import java.util.Scanner;
 
public class Main{
    public static int N[] = new int[]{2,3,5,7,11,13,17,19,23,29};
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
         
        while(sc.hasNext()){
            int num = sc.nextInt();
            int temp = (int)Math.sqrt(num);
            int count=0;
            int i=0;
            int j=31;//由已知質因子陣列N決定
             
            while(num>1){
                //先解決已知的質因子
                if(i<N.length){
                    while(num%N[i]==0){
                        num /= N[i];
                        count++;
                    }
                    i++;
                }else{
                    while(num%j==0){
                        num /= j;
                        count++;
                    }
                    j += 2;//大於2的偶數肯定不是質因子
                    if(j>temp)
                        break;
                }
            }
             
            if(num>1)
                count++;
            System.out.println(count);
        }
    }
}