分解质因数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());
    }
    	
    
}
}
发布了48 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44268113/article/details/104273342