問題描述
求出區間[a,b]中所有整數的質因數分解。
輸入格式
輸入兩個整數a,b。
輸出格式
每行輸出一個數的分解,形如k=a1 x a2 x a3…(a1<=a2<=a3…,k也是從小到大的)(具體可看樣例)
樣例輸入
3 10
樣例輸出
3=3
4=2x2
5=5
6=2x3
7=7
8=2x2x2
9=3x3
10=2x5
提示
先篩出所有素數,然後再分解。
數據規模和約定
2<=a<=b<=10000
方法一:
質數表,循環。
方法二:
先產生質因數。按順序枚舉所有數,判斷是否爲質因數。
代碼:
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
String s=buf.readLine();
String str[]=s.split(" ");
int i=Integer.parseInt(str[0]);
int n=Integer.parseInt(str[1]);
for(int j=i;j<=n;j++){
StringBuffer b=new StringBuffer();
b.append(j).append("=");
int x=j;
int y=(int)Math.sqrt(x);
if(y<2){//說明x的值在[1,3]內,因爲1,2,3全是素數,直接等於本身。
b.append(j);
}
else{
for(int k=2;k<=y;k++){
//若x能被K整除,再進行分解,k從最小的素數2開始。
if(x%k==0){
//若能被k整除,則分解出的因數爲k,寫入式中。
b.append(k).append("*");
//x除去k後的數繼續進行分解
x=x/k;
//看分解後剩下的值是否小於4,若小於4,則y<2,跳出循環,無需再分解,直接寫入式子。
y=(int)Math.sqrt(x);
k=1;
}
}
//x小於4,直接寫入式子
b.append(x);
}
System.out.println(b.toString());
}
}
}