进一步优化填充for循环的Java代码
我写了一个代码,返回两个素数,它们的间隔等于给定的进一步优化填充for循环的Java代码,java,performance,for-loop,Java,Performance,For Loop,我写了一个代码,返回两个素数,它们的间隔等于给定的long,并且它们之间没有其他素数 以下是我到目前为止所采用的方法: public static long[] firstGap(int gap, long lLimit, long uLimit) { for(long i=lLimit; i<=uLimit; i++) { for(long j=i+1; j<=uLimit; j++) { if(isPrime(i) &&am
long
,并且它们之间没有其他素数
以下是我到目前为止所采用的方法:
public static long[] firstGap(int gap, long lLimit, long uLimit) {
for(long i=lLimit; i<=uLimit; i++) {
for(long j=i+1; j<=uLimit; j++) {
if(isPrime(i) && isPrime(j) && j-i==gap && !repeatedIsPrime(i+1,j-1)) {
return new long[]{i,j};
}
}
}
return null;
}
public static long[]firstGap(int-gap、long-lLimit、long-uLimit){
对于(long i=lLimit;i您可以使用以下代码:
public static long[] firstGap(int gap, long lLimit, long uLimit) {
for(long i=lLimit; i<=uLimit; i++) {
if(isPrime(i)) {
long j = gap + i;
if (isPrime(j) && !repeatedIsPrime(i + 1, j - 1)) {
return new long[]{i, j};
}
}
}
return null;
}
public static long[]firstGap(int-gap、long-lLimit、long-uLimit){
(长i=lLimit;i)
移除内部循环:`if(isPrime(i)&&isPrime(i+gap)&&!repeatedIsPrime(i+2,i+gap-2)返回新的long[]{i,j}
确保lLimit和uLimit是奇数并递增2,因为检查偶数没有意义
检查素数时,运行到n的平方根
可以使用HashMap确保只检查同一个数字一次,但在移动时必须删除最小的数字
使用更智能的素性测试,例如Fermat测试以获得更快的iPrime(i)
通过首先改进算法,您可以大大加快该程序的运行速度。减少方法调用并不会加快代码的运行速度。
public static boolean repeatedIsPrime(long x, long y) {
for(long i=x; i<=y; i++) {
if(isPrime(i)) {
return true;
}
}
return false;
}
public static long[] firstGap(int gap, long lLimit, long uLimit) {
for(long i=lLimit; i<=uLimit; i++) {
if(isPrime(i)) {
long j = gap + i;
if (isPrime(j) && !repeatedIsPrime(i + 1, j - 1)) {
return new long[]{i, j};
}
}
}
return null;
}