因此,我有一个程序可以找到数字的素因式分解。
public static void primeFactors(int number){
int i=2;
while(number>1){
if (number%i==0){
System.out.println(i);
number/=i ;
}else{
i++;
if(isPrime(i)==true){
System.out.println(i);
number/=i;
}else{
i++;
}}}}
但问题是我希望它以数组形式返回。而且它必须能够大量运行并在5秒钟内运行。所以我将工作算法转换为:
public static int[] primeFactors2(int number){
int[] arrayINT =new int[10];
int i = 2;
int index=0;
while(i<=number/2){
if(number %i==0 && isPrime(i)){
arrayINT[index]=i;
index++;
}
i++;
}
return arrayINT;
}}
这不会返回正确的结果,也不是有效的速度明智的选择。我到底在做什么错!
这是isPrime():
public static boolean isPrime(int number){
if (number<2){
return false;
}
if (number==2){
return true;
}
if (number%2==0){
return false;
}
int ceiling=number;
for(int i=3;number>i&&ceiling>i;i+=2){
if(number%i==0){
return false;
}
ceiling=number/i;
} return true;
}
最佳答案
我对代码进行了一些修改,以适应您的要求。请看一下。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-
public static void main(String[] args) {
primeFactors(630);
System.out.println(Arrays.toString(primeFactors2(630)));
}
public static void primeFactors(int number) {
int i = 2;
int init = number;
while(i<=init/2){
if(number %i==0 && isPrime(i)){
System.out.println(i);
number/=i;
i--;
}
i++;
}
}
public static Integer[] primeFactors2(int number) {
List<Integer> list = new ArrayList<>();
int i = 2;
int init = number;
while(i<=init/2){
if(number %i==0 && isPrime(i)){
list.add(i);
number/=i;
i--;
}
i++;
}
return list.toArray(new Integer[list.size()]);
}
public static boolean isPrime(int number) {
if (number < 2) {
return false;
}
if (number == 2) {
return true;
}
if (number % 2 == 0) {
return false;
}
int ceiling = number;
for (int i = 3; number > i && ceiling > i; i += 2) {
if (number % i == 0) {
return false;
}
ceiling = number / i;
}
return true;
}