だけ第二のループは、数は任意の他の数で割り切れる場合見つけようとする2から100
に番号を生成する第1のループ。ここでは、数値を一連の数値(2からprime_index)で除算しようとします。
数字が10
であるとしましょう。最初の繰り返し(j = 2)のプライムインデックスは10/2 = 5
です。つまり、数字10
が2と5の間の任意の数で割り切れない場合、それは素数です。それは2
によってそれ自身を非素数にすることで割り切れる。
数字が9であるとしましょう。ここで、素数インデックスは最初の繰り返し(j = 2)に対して9/2 = 4
です。今、9 % 2
はリマインダーとして1を与えます。したがって、ループは2番目の繰り返し(j = 3)に続きます。今度は素数インデックスは9/3 = 3
(であることに注意してください。素数インデックス値は4から3に減らされます。)したがって、数値が3
で割り切れない場合、素数として決定されます。
したがって、繰り返しごとに、プライムインデックスが減少し、反復回数が減少します。
Example for Number 97,
j = 2, prime index = 97/2 = 48 (no of iterations for loop)
j = 3, prime index = 97/3 = 32 (no of iterations for loop)
j = 4, prime index = 97/4 = 24 (no of iterations for loop)
j = 5, prime index = 97/5 = 19 (no of iterations for loop)
j = 6, prime index = 97/6 = 16 (no of iterations for loop)
j = 7, prime index = 97/7 = 13 (no of iterations for loop)
j = 8, prime index = 97/8 = 12 (no of iterations for loop)
j = 9, prime index = 97/9 = 10 (no of iterations for loop)
j = 10, prime index = 97/10 = 9 (loop exits as condition failed 10 <= 9 and declares 97 as a prime number)
は今、ここでのループは、実際に10回の反復の代わりの提案48回の反復を取りました。
コードを修正して理解を深めることにしましょう。
public static void main(String args[]) {
// Number from 2 to 100
for(int i=2; i < 100; i++) {
if (isPrimeNumber(i)) {
System.out.println(i + " is prime");
}
}
}
ここでは、最適化されていない方法isPrimeNumberNotOptimized()
を参照してください。
private static boolean isPrimeNumberNotOptimized(int i) {
for(int j=2; j <= i/2; j++) {
// if it is, then its not prime
if((i%j) == 0) {
return false;
}
}
return true;
}
また、プライムインデックスで最適化された別の方法isPrimeNumberOptimized()
です。
private static boolean isPrimeNumberOptimized(int i) {
for(int j=2; j <= i/j; j++) {
// if it is, then its not prime
if((i%j) == 0) {
return false;
}
}
return true;
}
ここで、両方のメソッドが実行され、正しく素数が印刷されます。
しかし、最適化された方法では、97
が10回目の繰り返しで素数であると判断されます。
そして、最適化されていない方法は、48回目の反復で同じものを決定します。
希望、あなたは今それを理解しています。
FYI:プライムインデックスは、計算に使用した数値です。数が割り切れない場合に派生プライム指数& 2の間に、その素数
は、デバッガ(またはあなたの頭を持つ)を使用してプログラムを試してみてください、次のような私は必要 – Neo
と説明。 2回目のforループの後の動作 –
あなたはそれが何をしていると思いますか?どうしてそう思うの?何が起きているのかを理解しようとしていると言いますが、最良の方法は最初に自分自身を理解することです。 – Frakcool