演算法學習【10】尋找質因數的個數
阿新 • • 發佈:2018-12-08
題目如下:
注意:最多隻有一個質因子大於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); } } }