Привет. Есть вот такой код, он из книги Кочан Стефан «Язык программирования Си», стр. 117.
#include <stdio.h>
#include <stdbool.h>
#define SIZE 50
int main() {
int primes[SIZE], prime_index = 2;
bool is_prime;
primes[0] = 2;
primes[1] = 3;
for (int p = 5; p <= SIZE; p += 2) {
is_prime = true;
for (int i = 1; is_prime && p / primes[i] >= primes[i]; i++) {
if (p % primes[i] == 0)
is_prime = false;
}
if (is_prime) {
primes[prime_index] = p;
prime_index++;
}
}
for (int i = 0; i < prime_index; i++) {
printf("%i ", primes[i]);
printf("\n");
}
return 0;
}
Я пытаюсь понять ход программы. Например: третья итерация главного цикла, p == 9; дальше идем во вложенный цикл и там встречаем эту строку,
p / primes[i] >= primes[i]
Автор утверждает, что проверка эта нужна, чтобы узнать - значение p не превышает квадратного корня из prime_i.
Объясните пожалуйста.