Код, как и сам алгоритм максимально простые и просто написаны, однако мне никак не удаётся понять момент в коде, который я ниже выделю жирным шрифтом. Что тут происходит? Я пытался чуть ли не вручную на бумаге пройти каждую итерации, например, с x = 7, однако на уже второй итерации при i =3 по логике условие цикла не соблюдается, так как 9 (i*i) не может быть меньше 8 (num+1). И зачем вообще присваивать a [j] значение 0? Также насчёт Big O непонятно. Предполагаю, что тут он выглядит, как O(logN), однако до конца не уверен, так как не понимаю работу вышеописанной части.
Прошу прощения, если мой вопрос вызвал у вас испанский стыд.
#include <iostream>
#include <windows.h>
using namespace std;
const int x = 7;
void number_type(int num)
{
int a[x];
for (int i = 2; i < num + 1; i++)
{
if (a[i])
{
<b>for (int j = i * i; j < num + 1; j += i)
a[j] = 0; </b>
}
}
if (a[num])
cout << num << " - простое число" << '\n';
else
cout << num << " - составное число" << '\n';
}
int main()
{
setlocale(LC_ALL, "Ru");
number_type(x);
return 0;
}