/* * Реализация решета Эратосфена */ #include #include #include // Решето Эратосфена std::vector sieveOfEratosthenes(int n) { // 1. Выписываем подряд все числа от 2 до n std::vector prime; for (int i = 2; i <= n; i++) { prime.push_back(i); } // 2. Пусть переменная p равна первому простому числу в массиве. int p = prime[0]; // 3. Зачеркиваем числа, кратные p step_3: for (int i = 0; i < prime.size(); i++) { if (prime[i] == p) { continue; } if (prime[i] % p == 0) { prime.erase(prime.begin() + i); i--; } } // 4. Найти первое не зачеркнутое число больше p for (int i = 0; i < prime.size(); i++) { if (prime[i] > p) { p = prime[i]; goto step_3; } } return prime; }