次のプログラムは、素数変数を決定します。1より大きくpより小さいdのすべての値に対して剰余(p%d)を返す値は、isPrimeの値を「1」に設定します。
- (int)someMethod
{
@autoreleasepool {
int isPrime;
for (int p = 2; p <= 50; ++p) {
isPrime = 1;
for (int d = 2; d < p; ++d) {
if ( p % d == 0)
isPrime = 0;
if ( isPrime != 0)
NSLog (@"%i ", p);
}
}
}
return 0;
}
私の質問は、最初の「for」ステートメントが「1」だけインクリメントした直後に進行するのに対し、2番目の「for」ステートメントでは、dの値がp以上になるまでループが進行してから最後に進むのはなぜですか。 「if」ステートメントとNSLog。
この質問が明確でない場合、たとえば、pの値が14の場合、プログラムは次のように進行します。
- pは1ずつ増加して15になります
- 変数isPrimeは1に設定されます
- dの値は2に設定されます
- p%dが計算されます。
- 結果は0に等しくないため、forステートメントはスキップされます
- 次に、dの値は、私が理解できない何らかの理由で3に増分し、dが15に等しくなるまでループが続きます。代わりに、単にifステートメントとNSLogに移動し、「15」と表示されます。 "。2番目の「for」ループが「if」ステートメント内でループを続けてdをインクリメントするのに対し、最初のループはpを1回インクリメントしてから次に進むのはなぜですか?