找质因数只需要找到根号n记为a,因为假设存在一个数大于a不妨令为b
则n=a*a
n=b*c (c<a)
找到的应该是c而不是b
补充改进版:
在找质因数的过程中判断是否是素数,若不是素数则没有必要浪费时间
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
if (n==1){
System.out.println("1=1");
return;
}
String str1=n+"=";
StringBuilder str2= new StringBuilder();
for (int i=2;i<=Math.sqrt(n);i++){
if (isPrime(i)){
int j=0;//次数
while (n%i==0){
j++;
n/=i;
}
if (j>0){
str2.append("*").append(i);
}
if (j>1){
str2.append("^").append(j);
}
}
}
if (n>1){
str2.append("*").append(n);
}
System.out.println(str1+str2.substring(1,str2.length()));
}
public static boolean isPrime(int number) {//判断素数
// 小于2的数都不是素数
if (number < 2) {
return false;
}
for (int i=2;i*i<=number;i++){
if (number%i==0) return false;
}
return true;
}
}
原版:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
if (n==1){
System.out.println("1=1");
return;
}
String str1=n+"=";
StringBuilder str2= new StringBuilder();
for (int i=2;i<=Math.sqrt(n);i++){
int j=0;//次数
while (n%i==0){
j++;
n/=i;
}
if (j>0){
str2.append("*").append(i);
}
if (j>1){
str2.append("^").append(j);
}
}
if (n>1){
str2.append("*").append(n);
}
System.out.println(str1+str2.substring(1,str2.length()));
}
}
i*i<=n换成i<=Math.sqrt(n)后竟然少了两组超时