配列に問題があります。私はこの本から、このコードをコピー:特に2つの配列インデックスを区別しますか?
#include <stdio.h>
#include <stdbool.h>
int main (void)
{
int p, i, primes[50], primeIndex = 2;
bool isPrime;
primes[0] = 2;
primes[1] = 3;
for (p = 5; p <= 50; p = p + 2) {
isPrime = true;
for (i = 1; isPrime && p/primes[i] >= primes[i]; ++i)
if (p % primes[i] == 0)
isPrime = false;
if (isPrime == true) {
primes[primeIndex] = p;
++primeIndex;
}
}
for (i = 0; i < primeIndex; ++i)
printf ("%i ", primes[i]);
printf ("\n");
return 0;
}
、私はprimeIndex
とi
変数間の違いを理解し、トラブルを抱えています。 primeIndex
はアレイ番号を表し、i
はアレイに配置された番号を指します。右?
誰でもこのアルゴリズムの名前を知っていますか? – bacchus
'isPrime = false;'を設定すると、早期にループを終了させるために 'break;'(と中カッコ{{}})を追加することもできます。 –
さらに悪いことに、boolean(ループ不変式+ 1/2)の 'isPrime'はgotoによって取り除かれ、add-to-arrayは' primes [primeIndex ++] = p; 'BTW' p < = 50'テストは 'primeIndex <50'でなければなりません – wildplasser