diff --git a/main.cpp b/main.cpp index 7687125..127e30f 100644 --- a/main.cpp +++ b/main.cpp @@ -235,6 +235,44 @@ string convertToBase(int number, int base) { reverse(result.begin(), result.end()); return result.empty() ? "0" : result; // Если число 0, вернуть "0" } +void sieveOfEratosthenes(int n) { + // Создаем вектор для хранения простоты чисел. Изначально считаем, что все числа простые. + vector isPrime(n + 1, true); + + // 0 и 1 не являются простыми числами. + isPrime[0] = isPrime[1] = false; + + for (int i = 2; i * i <= n; ++i) { + if (isPrime[i]) { + // Отмечаем все кратные i как составные. + for (int j = i * i; j <= n; j += i) { + isPrime[j] = false; + } + } + } + + // Выводим все простые числа. + cout << "Простые числа до " << n << ": "; + for (int i = 2; i <= n; ++i) { + if (isPrime[i]) { + cout << i << " "; + } + } + cout << endl; +} +void z2() { + int n; + cout << "Введите предел для поиска простых чисел: "; + cin >> n; + + if (n < 2) { + cout << "Простых чисел нет." << endl; + } + else { + sieveOfEratosthenes(n); + } + +} void z5_16() { string inputFile = "input.txt"; // Исходный файл string outputFile = "output.txt"; // Файл для результатов @@ -361,6 +399,7 @@ void z5_22() { void showMenu() { cout << "Меню задач:\n"; cout << "1. «Алгоритм Евклида»\n"; + cout << "2. «Решето какого-то чела»\n"; cout << "3. 3.16\n"; cout << "4. 3.22\n"; cout << "6. 4.16\n"; @@ -378,6 +417,7 @@ void launchTasks() { switch (choice) { case 1: z1launcher(); break; + case 2: z2(); break; case 3: z3_16(); break; case 4: z3_22(); break; case 6: z4_16(); break;