分解質因數JAVA詳述

問題描述
  求出區間[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());
    }
    	
    
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章