• Написать код в с++ (Вывести на экран n простых чисел)

Ответы 1

  • 1. Лобовой алгоритм

    Пока мы не набрали n простых чисел, будем перебирать числа от 2 до ... и пытаться разложить их на множители.

    Код вложен в ответ.

    2. Решето Эратосфена

    Решето Эратосфена позволяет быстро находить все простые числа на отрезке [2; x] (в нашем случае x - какая-то константа).

    Алгоритм

    Пусть x равен 25.

    Тогда идея такова: запишем все числа от 2 до 25.

    2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

    По умолчанию все числа помечены как простые. Конкретно здесь числа, помеченные как составные, будут показываться в нижних индексах: ₂₅

    Берем первое число 2. Оно помечено как простое. От квадрата этого числа до x помечаем все числа, делящиеся на 2, как составные:

    2 3 ₄ 5 ₆ 7 ₈ 9 ₁₀ 11 ₁₂ 13 ₁₄ 15 ₁₆ 17 ₁₈ 19 ₂₀ 21 ₂₂ 23 ₂₄ 25

    Берем следующее число, помеченное как простое. Это 3. От квадрата этого числа до x помечаем все числа, делящиеся на 3, как составные:

    2 3 ₄ 5 ₆ 7 ₈ ₉ ₁₀ 11 ₁₂ 13 ₁₄ ₁₅ ₁₆ 17 ₁₈ 19 ₂₀ ₂₁ ₂₂ 23 ₂₄ 25

    Следующее простое число - 5. От квадрата пяти до x помечаем все числа, кратные 5, как составные:

    2 3 ₄ 5 ₆ 7 ₈ ₉ ₁₀ 11 ₁₂ 13 ₁₄ ₁₅ ₁₆ 17 ₁₈ 19 ₂₀ ₂₁ ₂₂ 23 ₂₄ ₂₅

    Квадрат всех остальных простых чисел больше x. Решето построено.

    Код

    Перевернем массив, представляющий решето. В composite[i] хранится true, если i - составное, false иначе.

    #include <bits/stdc++.h>

    using namespace std;

    const int x = 2000000;

    bool composite[x + 1];

    void calc() {

     for (long long i = 2; i <= x; ++i)

       if (!composite[i] && (i * i <= x))

         for (long long j = i * i; j <= x; j += i)

           composite[j] = true;

    }

    int main() {

       calc();

       int n;

       cin >> n;

       int k = 0;

       for (int i = 2; i <= x && k < n; ++i)

         if (!composite[i]) {

             cout << i << " ";

             ++k;

         }

       cout << endl;

       return 0;

    }

    answer img
    • Автор:

      sagelkcr
    • 5 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years