算法提高 8-1因式分解
时间限制:10.0s 内存限制:256.0MB
问题描述
设计算法,用户输入合数,程序输出若个素数的乘积。例如,输入6,输出2*3。输入20,输出2*2*5。
样例
与上面的样例输入对应的输出。
例:
例:
![](https://i-blog.csdnimg.cn/blog_migrate/46eea56c6e9a481e2b13e26846a51601.png)
![](https://i-blog.csdnimg.cn/blog_migrate/02002ed766b61f3803dc776a06759e48.png)
数据规模和约定
输入数据中每一个数在int表示范围内。
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
if(isPrime(n)){
System.out.println(n);
}else{
boolean flag=true;
while(n%2==0){//减少运算时间
if(flag){
System.out.print(2);
flag=false;
}
else{
System.out.print("*2");
}
n/=2;
}
while(n!=1){//结束标志,注意不是0
for(int i=3;;i+=2){
if(isPrime(i) && n%i==0){
if(flag){
System.out.print(i);
flag=false;
}else{
System.out.print("*"+i);
}
n/=i;
break;
}
}
}
}
}
public static boolean isPrime(int a){//判断素数函数
if(a==2)
return true;
if(a%2==0){
return false;
}
boolean flag=true;
for(int i=3;i<=Math.sqrt(a);i+=2){
if(a%i==0){
flag=false;
break;
}
}
return flag;
}
}