В частности, PRIMEGAME Конвея .
Это алгоритм, разработанный Джоном Х. Конвеем для генерации простых чисел с использованием последовательности из 14 рациональных чисел:
A B C D E F G H I J K L M N
17 78 19 23 29 77 95 77 1 11 13 15 15 55
-- -- -- -- -- -- -- -- -- -- -- -- -- --
91 85 51 38 33 29 23 19 17 13 11 14 2 1
Например, F - это дробь 77/29
.
Итак, вот как алгоритм находит простые числа. Начиная с числа 2
, найдите первую запись в последовательности, которая при умножении дает целое число. Вот это M
, 15/2
, которая производит 15
. Затем для этого целого числа 15
найдите первую запись в последовательности, которая при умножении дает целое число. Это последний N
, или 55/1
, который дает 825
. Запишите соответствующую последовательность. (Проницательный из вас может распознать это как ФРАКТРАН программу .)
После нескольких итераций вы получите следующее:
2, 15, 825, 725, 1925, 2275, 425, 390, 330, 290, 770, 910, 170, 156, 132, 116, 308, 364, 68, 4 ...
Обратите внимание, что последний элемент в списке 4
, или 2^2
. Вот наше первое простое число ( 2
показатель степени), сгенерированное этим алгоритмом! В итоге последовательность будет выглядеть следующим образом:
2 ... 2^2 ... 2^3 ... 2^5 ... 2^7 ... etc.
Таким образом, получая простые числа. Это OEIS A007542 .
Соревнование
Для заданного числа ввода n
, либо с нулями, либо с одним индексом (на ваш выбор), либо выведите первые n
числа этой последовательности, либо выведитеn
номер этой последовательности.
Примеры
Приведенные ниже примеры выводят n
th-й член последовательности с нулевым индексом.
n output
5 2275
19 4
40 408
правила
- Если применимо, вы можете предположить, что ввод / вывод будет соответствовать целочисленному типу вашего языка.
- Вход и выход могут быть заданы любым удобным способом. .
- Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
источник
408.0
вместо408
например.Ответы:
Python 3 ,
173 165 153 145 144 136 135 127 126 125 108 107104 байтаПопробуйте онлайн!
2>>n*2
является2
дляn==0
и0
в противном случае.103 байта, если мы можем вернуть поплавки.
источник
ФРАКТРАН , 99 байт
Попробуйте онлайн!
Программа принимает
2*31^n
в качестве входных данных, которые используются в качестве исходного состояния.Все дроби в исходной программе FRACTRAN были разделены на 31 (первый неиспользуемый простой регистр), поэтому программа останавливается на n-й итерации.
источник
Желе ,
4943 байтаПопробуйте онлайн!
источник
0ọ0¤
вinf
противном случае вы могли бы уменьшить это до 42 байтов ...Python 3 , 107 байт
Попробуйте онлайн!
Кодирует список фракций
zip
две строки байтов, содержащие непечатаемые символы с низким ASCII.Если
n
ноль, мы возвращаем аргументk
; в противном случае мы рекурсируем с новыми параметрами. Наше новоеk
это первое значение ,k*a//b
соответствующее некоторой доле(a, b)
в списке такого , чтоk*a//b
является целым числом, то естьk*a%b<1
.источник
MATL , 50 байтов
Попробуйте онлайн!
источник
Hi:
... Ой, "Привет" вам тоже код. :-)J ,
116110 байтПопробуйте онлайн!
0 индексированные; возвращает n-ное число
Некоторые байты можно сохранить, сделав глагол молчаливый, но у меня проблемы с
^:
работой.Объяснение:
J описывает рациональные числа в форме NrD, где N - числитель, а D - знаменатель, например,
17r91 78r85 19r51 23r38...
я создал 2 отдельных списка для числителей и знаменателей и сделал из них 2 числа из 96 базисов.1047856500267924709512946135x%&(96#.inv])5405040820893044303890643137x
преобразует числа base-96 в списки и создает список дробей, разделяя два списка.2
начать с 2^:y
повторите глагол слеваn
(у - аргумент функции)]
правильный аргумент (начинается с 2, а затем использует результат каждой итерации)*
умножить список дробей на правильный аргумент(=<.)
являются целым числом результатов (сравните каждое число с его полом){.@I.@
находит индексI.
первого{.
из целых чисел{[
использует индекс для получения номераисточник
('0m26<l~l *,..V'%&(31x-~3&u:)'ztRE@<620,*-! ')&(0{*#~0=1|*)2:
05AB1E ,
4443 байта0 индексированные
Попробуйте онлайн!
объяснение
Большое количество нажатых является
17781923297795770111131515559185513833292319171311140201
источник
Пари / ГП , 121 байт
Попробуйте онлайн!
источник
JavaScript (Node.js) ,
10695 байтовПопробуйте онлайн!
источник
Buffer
. Кроме того, я думаю, что безопасно помещать все данные в один буфер: 95 байтов .Сетчатка , 213 байт
Попробуйте онлайн! Объяснение:
Замените входные данные списком всех дробей плюс начальное целое число.
Перевести все в одинарные.
Повторите подстановку количество раз, данное исходным вводом.
Найдите знаменатель, который равномерно делит целое число.
Замените целое число на результат деления, умноженный на числитель.
Преобразуйте целое число в десятичное и выведите результат.
источник
Атташе , 81 байт
Попробуйте онлайн! Выводит дробь больше 1. Например, ввод
5
возвращает2275/1
. Это можно исправить с помощью плюс 2 байта, добавивN@
в программу.объяснение
Это карри функция, которая карри
Nest
с двумя предопределенными аргументами:и
2
. Этот последний аргумент является просто начальным семенем, а аргумент, который передается этой функции, является количеством итераций для вложения данной функции.Для кодирования PRIMEGAME используется следующее:
Это оценивается как таковое:
Давайте заменим это выражение
G
в объяснении. Наша первая функция становится:Это выполняет одну итерацию кода FRACTRAN
_
, вход в функцию. ЭтоFind
ев вIntegral
элемент (один , который представляет собой целое число) массив_*G
, который является входным_
умножается с каждым членомG
.Nest
просто применяет это преобразование заданное количество раз.Атташе, 42 байта
Я реализовал части
$langs
библиотеки, вдохновленный этим вызовом, поэтому я отмечаю этот раздел как неконкурентный.Это просто запрашивает список у
FRACTRAN_EXAMPLES
меня есть. Каждый пример являетсяFractranExample
экземпляром, который вызывает встроеннуюFRACTRAN
функцию.prime
Пример PRIMEGAME Конвея.источник
F # (моно) , 215 байтов
Попробуйте онлайн!
источник
PHP, 183 байта (189 с тегом "php")
Гольф:
Ungolfed:
Попробуйте онлайн!
источник