问题描述
求出区间[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());
}
}
}