【发布时间】:2019-10-01 22:45:46
【问题描述】:
所以我有一个程序可以找到一个数的素数分解。
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;
}
【问题讨论】:
-
你能分享
isPrime吗? -
刚刚编辑过!
-
我倾向于猜测第二个版本甚至没有编译,因为
i++;}有一个额外的右大括号(})。如果它确实编译了,那么它可能并不意味着你认为它的意思。 -
@JohnBollinger 是的,它不是一个额外的右括号。请看上面的空白,(效果很好)它有相同的
-
这似乎也有一个逻辑问题。当我调用
primeFactors(10)时,它会打印 2 和 3。这是正确的吗?我相信答案应该是 2 和 5。
标签: java arrays optimization