天天看點

java慕課(翁恺)第七周練習題 分解質因數

題目内容:

每個非素數(合數)都可以寫成幾個素數(也可稱為質數)相乘的形式,這幾個素數就都叫做這個合數的質因數。比如,6可以被分解為2x3,而24可以被分解為2x2x2x3。

現在,你的程式要讀入一個[2,100000]範圍内的整數,然後輸出它的質因數分解式;當讀到的就是素數時,輸出它本身。

輸入格式:

一個整數,範圍在[2,100000]内。

輸出格式:

形如:

n=axbxcxd

n=n

所有的符号之間都沒有空格,x是小寫字母x。

輸入樣例:

18

輸出樣例:

18=2x3x3

import java.util.Scanner;

public class PrimeFactor {
		
	
	public static void primeFactor (int num) {
		
		//第一步判斷素數
		int count=0;		
		for(int i=1;i<num;i++) {
			int k=num%i;
			if(k==0) {
				count++;
			}
		}
		
		//如果是素數直接列印num	
		if(count==1) {
			System.out.println(num);
		}
		
		//不是素數就開始找質因數
		else {
		for(int i=2;i<num;i++) {
		int k=num%i;
			if(k==0) {
				System.out.print(i+"*");
				//重置num
				num=num/i;
				//繼續從2開始試,等同于為新num重置一次for循環
				//一開始重置為i=2;是錯的!!這樣的話分解不完全,試了個64試出來了,最有效率應該重置為i=i-1,或者粗魯一點i=1;
				i=i-1;
			}
			
		}
		//最後一個沒進if循環的質因數在這裡列印
		System.out.print(num);
	}
		
}

	public static void main(String[] args) {
		
		Scanner in= new Scanner(System.in);
		int num =in.nextInt();
		System.out.print(num+"=");
		primeFactor(num);
		
	}

}

           

一開始考慮過new一個數組存儲質因數

好像無法實作(?)

最樸素寫法了歡迎讨論

中途幾次把if判斷寫成while, debug無限循環。。。

個人感覺重置i=i-1那裡是全題的精髓所在 很遺憾不是自己想出來, 自己就會粗暴i=1。。。

java慕課(翁恺)第七周練習題 分解質因數
java慕課(翁恺)第七周練習題 分解質因數