问题描述:
求出区间[a,b]中所有整数的质因数分解。
资源限制:
时间限制:1.0s 内存限制:512.0MB
输入格式:
输入两个整数a,b。
输出格式:
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入:
3 10
样例输出:
3=3
4=22
5=5
6=23
7=7
8=222
9=33
10=25
提示:
先筛出所有素数,然后再分解。
数据规模和约定:
2<=a<=b<=10000
分析:
先定义了一个用于判断是不是素数的方法,如果是素数就可以直接输出了(不定义这玩意好像也无所谓),再定义一个方法用于分解素数,思路如下:如果这个数刚好能被i整除那么打印这个数加*再将这个数除i进入下一次递归,若不是因子则使i加一进入下一次递归,若这个数等于i,则直接输出这个数不用输出乘号。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
int f=in.nextInt();
int e=in.nextInt();
while (f<=e){
if (ye(f)){
System.out.println(f+"="+f);
}else {
System.out.print(f+"=");
fj(f,2);
System.out.println();
}
f++;
}
}
public static boolean ye(int num){ //判断是否为素数
boolean flag=true;
for(int i=2;i<=Math.sqrt(num);i++){
if (num%i==0){
flag=false;
break;
}
}
return flag; //是素数返回true不是返回false
}
public static void fj(int num,int i){
for (;i<=num;){
if (i<num && num%i==0){
System.out.print(i+"*");
num=num/i;
fj(num,i);
break;
}else if (i<num&&num%i!=0){
i++;
fj(num,i);
break;
}else{
System.out.print(num);
break;
}
}
}
}