基础练习 分解质因数
时间限制:1.0s 内存限制:512.0MB
问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
import java.util.Scanner;
public class Zhiyinshu {
private static boolean isprime(int num){
//两个较小数另外处理
if(num==2||num==3)
return true ;
//不在6的倍数两侧的一定不是质数
if(num%6!=1&&num%6!=5)
return false ;
double tmp = Math.sqrt(num);
//在6的倍数两侧的也可能不是质数
for(int j=5;j<=tmp;j+=5)
if(num%j==0||num%(j+2)==0)
return false ;
//排除所有,剩余的是质数
return true ;
}
private static void fun(int i){
int temp=i;
for(int j=2;j<=i;j++){
if(isprime(j)){
while(temp%j==0&&temp/j!=1){
System.out.print(j+"*");
temp/=j;
}
if(temp%j==0&&temp/j==1){
System.out.print(j);
}
}
}
System.out.println();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int a=in.nextInt();
int b=in.nextInt();
for(int i=a;i<=b;i++){
System.out.print(i+"=");
fun(i);
}
}
}
这是我自己的代码 只通过了一半测试数据,超时了,下面是我看的别人的代码
import java.util.Scanner;
public class 分解质因数2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
String[] strs = str.split(" ");
int n = Integer.parseInt(strs[0]);
int m = Integer.parseInt(strs[1]);
for (int i = n; i <= m; i++) {
fun(i);
}
}
private static void fun(int i) {
// TODO Auto-generated method stub
int prime=2;
int n=i;
int position=1;
while(prime<=n){
if(i%prime!=0){
prime++;
}
else{
i/=prime;
if(position==1){
System.out.print(n+"="+prime);
position++;
}
else System.out.print("*"+prime);
}
}
System.out.println();
}
}
基础练习 分解质因数
时间限制:1.0s 内存限制:512.0MB
问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000