gpt4 book ai didi

java - 进一步优化我的充满 for 循环的 Java 代码

转载 作者:行者123 更新时间:2023-11-30 02:24:30 25 4
gpt4 key购买 nike

我编写了一个代码,返回两个质数,它们的间隙等于给定的 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 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 但随后我会进行有损转换,接下来是减少方法调用,但我找不到方法来做到这一点。到目前为止,我所做的唯一改进是删除了一些不必要的值存储和分配,除此之外我什么也没得到。那么如何进一步优化我的代码呢?

最佳答案

您可以使用以下代码:

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;
}

首先,如果 isPrime(i) == false,则其他检查没有任何意义。二、for(long j=i+1; j<=uLimit; j++)可以删除,因为你只使用了一个j(当j-i==gap时)

关于java - 进一步优化我的充满 for 循环的 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46016515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com