所以我有一个程序可以找到一个数字的素数因子分解。
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;
}
答案 0 :(得分:0)
我已经修改了一些代码以满足您的要求。请看一下。
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;
}