Задать вопрос
11 декабря, 13:03

Придумайте алгоритм, находящий N-ное простое число, если N<50

+5
Ответы (1)
  1. 11 декабря, 14:24
    0
    Учитывая, что 50 - это очень немного (50-е простое число всего лишь 229), можно придумать всё что угодно (даже ужасающе неэффективное).

    Можно просто перебирать все числа, начиная с двойки, и каждое делить на все меньшие его, начиная с двойки. Если хоть на одно разделится - не простое, иначе простое. Попутно подсчитывая число простых чисел, N-е найти не составит труда.

    Псевдокод:

    ввод N

    i = 2

    counter = 0

    нц

    для j = 2 ... (i - 1)

    если i mod j = 0 тогда

    увеличить i на 1

    следующая итерация внешнего цикла

    увеличить counter на 1

    если counter = N тогда

    вывод i

    завершение работы программы

    увеличить i на 1

    кц

    Дальше можно изменять эту программу, оптимизировать. Например, известно, что меньший собственный делитель любого составного числа не превосходит корня из этого числа, следовательно, можно во внутреннем цикле делать перебор не до i - 1, а до [sqrt (i) ].

    Другое полезное наблюдение может заключаться в том, что все простые числа кроме 2 имеют вид 6m - 1 или 6m + 1 (остальные не подходят: очевидно, 6n делится на 6, 6n + - 2 четные числа, а 6n + 3 делится на 3). Это наблюдение позволит примерно в три раза сократить число итераций внешнего цикла.

    Наконец, можно сохранять все встретившиеся простые числа в массив, и затем проверять, делится ли текущее число на простые числа, меньшие себя: если не делится, то оно - тоже простое. Для хранения 50 маленьких натуральных чисел в памяти не нужно много места.

    Можно воспользоваться каким-нибудь другим алгоритмом, например, решетом Эратосфена. Но в зависимости от того, на каком языке программирования будет потом реализовываться этот алгоритм, он может записываться нетривиально. Для выполнения "на бумажке" решето Эратосфена - один из самых удобных способов.

    В конце концов, можно использовать "читерский" метод - взять откуда-нибудь первые 50 простых чисел, записать их куда-нибудь, а потом просто за O (1) находить нужное число в памяти.
Знаете ответ на вопрос?
Не уверены в ответе?
Правильный ответ на вопрос 👍 «Придумайте алгоритм, находящий N-ное простое число, если N ...» по предмету 📗 Информатика. Развернутая система поиска нашего сайта обязательно приведёт вас к нужной информации. Как вариант - оцените ответы на похожие вопросы. Но если вдруг и это не помогло - задавайте свой вопрос знающим оппонентам, которые быстро дадут на него ответ!
Искать готовые ответы
Похожие вопросы по информатике
Если данное предложение представить в виде алгоритма то это будет: Если сделаешь уроки, то можешь пойти в кино, иначе сиди дома. А) Линейный алгоритм В) Алгоритм с ветвлением С) Комбинированный алгоритм D) Алгоритм с циклом
Ответы (1)
Напишите как решать Ниже на 5 языках программирования записан алгоритм. Получив на вход число х, этот алгоритм печатает число l. Укажите наибольшее нечетное число х, при вводе которого алгоритм печатает 102.
Ответы (1)
Алгоритм выполнения домашнего задания. Алгоритм рецепта приготовления пирога. Алгоритм мытья посуды. Алгоритм путешествия Колобка в известной сказке. Оформление.
Ответы (1)
Какой алгоритм называется линейным? А. Алгоритм, в котором имеется ввод данных, вычисления и вывод результатов. Б. Алгоритм, в котором для получения результатов последовательно выполняются все операторы по одному разу В.
Ответы (1)
К какому виду алгоритма относится решение линейного уравнение? А) линейный алгоритм В) Развлетвляющийся алгоритм С) Циклический алгоритм Д) лабиринт Е) Оператор алгоритм
Ответы (1)