基础练习 分解质因数
时间限制: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提示先筛出所有素数,然后再分解。数据规模和约定2<=a<=b<=10000