У меня проблемы с массивами. Я скопировал этот код из книги:Отличие между двумя индексами массива?
#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;' (и скобки '{...}'), чтобы закончить цикл раньше. –
Еще хуже: весь логический (loop-инвариант + 1/2) 'isPrime' может быть удален goto, а add-to-array может быть скомпенсирован до' primes [primeIndex ++] = p; 'BTW' p < = 50' тест должен быть 'primeIndex <50' – wildplasser