profile
Размещено 5 лет назад по предмету Информатика от alexandraly1670

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

  1. Ответ на вопрос
    Ответ на вопрос дан DexelGamer

    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;

    }

Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 5 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.