題目内容:
每個非素數(合數)都可以寫成幾個素數(也可稱為質數)相乘的形式,這幾個素數就都叫做這個合數的質因數。比如,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。。。