题意:
将一个数分解为素数相乘
解答:
1、使用素数去除
2、注意输出格式,因为除到最后n可能等于1,也有可能n本来就等于1,这时候就需要标记来区分输出
具体java代码:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int x=n;
StringBuffer sb=new StringBuffer();
boolean flag=false;
int i=2;
for(i=2;i<Math.sqrt(n);i++)//确实只要枚举到sqrt(n)就够了。因为一个数被分别成
//一个小于一个大于sqrt(n)的数,小的数用Sqrt(n)枚举肯定够了。假设大的数还有
//可以被大于Sqrt(n)整除,那么这两个数相乘就大于n了。所以,大的数的枚举在sqrt(n)之前就够了,,不可能有大于此数还能被整除的。
{
if(isPrime(i)){
int k=0;
while(n%i==0){
k++;
n/=i;
}
if(k==1){
sb.append(i+"*");
}
if(k>1){
sb.append(i+"^"+k+"*");
flag=true;
}
}
}
if(n > 1){
sb.append(n);
System.out.println(x+"="+sb);
}
else {
if(!flag)
System.out.println("1=1");
else{
System.out.println(x + "="+sb.substring(0, sb.length() - 1));
}
}
}
public static boolean isPrime(int n){
if(n<2) return false;
for(int i=2;i<Math.sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
}