私は、ギャップがある与えられたlong
に等しい2つの素数を返し、それらの間に他の素数を持たないコードを書いた。数が2つの数字forループでいっぱいになったJavaコードをさらに最適化
public static boolean repeatedIsPrime(long x, long y) {
for(long i=x; i<=y; i++) {
if(isPrime(i)) {
return true;
}
}
return false;
}
間の素数があるのかどうかをチェックするために
public static boolean isPrime(long n) {
for(int i=2;i<n;i++) {
if(n%i==0) {
return false;
}
}
return true;
}
素数であるかどうかをチェックするために
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;
}
:
これらは私がこれまでに作った方法があります
私がこれまで行ってきたことは、ループインデックスをintとして持っていたのですが、その後、私は損失のある変換をしていました。メソッドの呼び出しをeducingが、私はそれを行う方法を見つけることができません。私が今までに作った唯一の改善点は、私が何も持っていない以外の値の不必要な格納と割り当てを取り除いたことです。では、コードをさらに最適化するにはどうすればよいですか?
このプログラムは、アルゴリズムを最初に改良することで大幅に高速化できます。メソッドの呼び出しを減らしても、このコードを高速化することはできません。 – pvg