我写了一个代码,返回两个素数,其间隙等于给定的long
,并且它们之间没有其他素数。进一步优化我的Java代码充满for-loops
这是迄今为止我所做的方法:
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 boolean isPrime(long n) {
for(int i=2;i<n;i++) {
if(n%i==0) {
return false;
}
}
return true;
}
为了检查是否有两个数字
public static boolean repeatedIsPrime(long x, long y) {
for(long i=x; i<=y; i++) {
if(isPrime(i)) {
return true;
}
}
return false;
}
之间的质数
我到目前为止所做的工作是将循环索引作为int,但然后我会有一个有损转换,接下来是r引发方法调用,但我找不到一种方法来做到这一点。到目前为止,我所做的唯一改进就是删除了一些不必要的存储和赋值,除此之外我什么都没有。那么我如何进一步优化我的代码呢?
您可以通过首先改进算法来大大提高此程序的速度。减少方法调用不会使代码更快。 – pvg