我遇到阵列问题。我从一本书中复制了这段代码:
#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
表示放入数组的编号。正确?
答案 0 :(得分:3)
primeIndex
是在prime
数组中写入下一个找到的素数的地方,也是到目前为止已知的素数的数量。 i
是用于试验分割的素数的指数。对于每个候选者,i
从1循环(我们不需要尝试primes[0] = 2
,因为只检查奇数)到第一个素数的索引大于候选的平方根。 / p>