Напишите программу или функцию, которая выводит / возвращает первые 10000 простых индексированных простых чисел.
Если мы называем n- е простое число p(n)
, этот список
3, 5, 11, 17, 31, 41, 59 ... 1366661
так как
p(p(1)) = p(2) = 3
p(p(2)) = p(3) = 5
p(p(3)) = p(5) = 11
p(p(4)) = p(7) = 17
...
p(p(10000)) = p(104729) = 1366661
Стандартные лазейки запрещены, а стандартные методы вывода разрешены. Вы можете ответить с помощью полной программы, именованной функции или анонимной функции.
Ответы:
MATLAB / Octave, 25 байтов
Это не становится намного проще, чем это.
источник
Python, 72 байта
Это завершается «списком ошибок вне диапазона» после печати 10000 номеров, что разрешено по умолчанию .
Использует метод теоремы Вильсона для генерации списка
l
простых чисел до 10000-го простого числа. Затем печатает простые числа с позициями в списке, сдвинутыми на 1 для индексации нулями, пока мы не исчерпаем границы после 10000-го простого числа.Удобно то , что верхняя граница
1366661
может быть оценена как82e5/6
что1366666.6666666667
, экономя символ.Я бы хотел использовать однопетлевой метод печати простых индексированных простых чисел по мере их добавления, но он кажется более длинным.
источник
J 11 байт
Выводит простые числа в формате
объяснение
источник
Mathematica,
262523 байтаЧистая функция, возвращающая список.
источник
Listable
так простоPrime@Prime@Range@1*^4&
сделает@
оператор имеет более высокий приоритет, чем^
при записиRange@10^4
? Это классическая Mathematica, которая портит вашу игру в гольф. Хороший трюк!Haskell, 65 байт
Выходы:
[3,5,11,17,31,41,59,67,83,109,127.....<five hours later>...,1366661]
Не очень быстро Как это работает:
p
бесконечный список простых чисел (наивно проверяя всеmod x y
s на y в[2..x-1]
). Возьмите первые10000
элементы списка, которые вы получаете, когда0:p!!
(получить n-й элементp
) отображается наp
. Мне нужно настроить список простых чисел, из которых я беру элементы, добавив одно число (->0:
), потому что функция индекса (!!
) основана на нуле.источник
PARI / GP, 25 байтов
источник
AWK - 129 байт
... хорошо ... слишком долго, чтобы выиграть очки за компактность ... но может быть, это может получить некоторую честь за скорость?
x
Файл:Бег:
Удобочитаемый:
Программа вычисляет поток простых чисел, используя
L
«ленту чисел», содержащую найденные простые числа, прыгающие вокруг,L
чтобы отметить соседние числа, о которых уже известно, что они имеют делитель. Эти прыжковые простые числа будут продвигаться, пока «лента чисел»L
отрубается числом по номеру с самого начала.Отрезание головки ленты
L[n]
пусто означает, что не существует известного (простого) делителя.L[n]
удержание значения означает, что это значение является простым и, как известно, делитсяn
.Так что либо мы нашли простой делитель, либо новый простой. Затем это простое число перейдет к следующему
L[n+m*p]
на ленте, найденной пустой.Это похоже на Сито Эратосфена, «вытащившего бутылку Кляйна». Вы всегда действуете в начале ленты. Вместо того, чтобы запускать несколько простых чисел через ленту, вы используете уже найденные простые числа, поскольку курсоры, отскакивающие от ленты, начинают на несколько дистанций своего значения до тех пор, пока не будет найдена свободная позиция.
В то время как внешний цикл генерирует одно простое или не простое решение для цикла, найденные простые числа подсчитываются и сохраняются в
P
качестве ключа, значение этой пары (ключ, значение) не имеет отношения к потоку программы.Если их ключ
i
находится вP
уже (i in P
), у нас есть простое число породы p (p (i)).Бег:
Примите во внимание, что этот код не использует внешние предварительно вычисленные простые таблицы.
Время заняло мой старый добрый Thinkpad T60, поэтому я считаю, что его стоит назвать быстрым.
Протестировано с
mawk
иgawk
на Debian8 / AMD64источник
CJam, 19
Вы можете попробовать это онлайн , но вам нужно немного терпения: p
Для записи, последний номер 1366661.
источник
Perl, 55 байт
Использование @DanaJ «ы
Math::Prime::Util
модуль для Perl (загружается с прагмойntheory
). Получите это с:источник
05AB1E, 7 байтов (не конкурирует)
Код:
Попробуйте онлайн! , Примечание , что я изменил
4
в2
. Если у вас много времени, вы можете поменять2
спину на4
, но это займет много времени. Мне нужно закрепить алгоритм для этого.Объяснение:
источник