Вступление:
Вы случайно испортили поток времени с помощью устройства, созданного вами для удовольствия, которое оказалось машиной времени. В результате вы оказались в далеком будущем. Вы поняли, что вычислительная мощность, вычислительная мощность и компьютеры в целом эволюционировали в огромном количестве, а точнее , в бесконечном количестве . Таким образом, вы получаете компьютер с бесконечной памятью и вычислительной мощностью. Вы не представляете, как оно может обладать бесконечной памятью и бесконечной вычислительной мощностью, но вы просто принимаете это и возвращаетесь в настоящее.
Вызов:
Вы слышали, что человек, который обнаружил самый большой в настоящее время премьер, 2^74,207,281 − 1
получил 100 000 долларов. Вы решаете создать программу, которая найдет следующее простое число, поскольку вы хотите вернуть деньги, потраченные на компьютер. Вы создаете тот, который принимает ввод числа и находит следующее простое число, используя брутфорс или любой другой метод.
Пояснения: у
вас есть гипотетическая машина с бесконечной памятью и вычислительной мощностью. Ваша программа НЕ ДОЛЖНА быть ограничена (например, C # могут хранить от int -2,147,483,648
до 2,147,483,647
), так что ваша программа должна быть в состоянии хранить и работать с любым числом любого размера. У вас есть бесконечные ресурсы, поэтому вам не нужно беспокоиться, не хватит ли вам памяти, если вы позволите это.
Пример ввода / вывода:
Ввод: наибольшее обнаруженное простое число с 22 338 618 цифрами.
Вывод: точно следующий штрих
Очевидно, вам не нужно доказывать, что это работает, так как для вычислений на физической машине потребуется куча времени. Но если вы переместили вашу программу на гипотетический компьютер с бесконечной вычислительной мощностью / памятью, она должна вычисляться мгновенно.
Поиск следующего простого числа и проверка, является ли число простым числом, это две совершенно разные вещи.
Ответы:
Mathematica, 9 байт
источник
Python 3 , 45 байт
Попробуйте онлайн!
источник
k
равно конечному результату,m
содержит(k-1)!^2
. Так как (к-1)! = -1 mod k имеет место только когда k простое число, мы имеем (k-1)! (K-1)! = 1 mod k, которое при умножении на k само будет k. Вы рассчитываете квадрат, чтобы избавиться от единственного исключения (k-1)! = 0 mod k для составного k, что происходит при k = 4. Правильно?RecursionError: maximum recursion depth exceeded in comparison
наf(1000)
RecursionError
.Python 2,
78777674 байта-1 байт благодаря @KritixiLithos
-1 байт благодаря @FlipTack
-2 байт благодаря @ElPedro
источник
n%i<1
корочеn%i==0
if
.<1
n+=1
иif
во вкладки и сохранить 2 байтаЖеле , 2 байта
Попробуйте онлайн!
Это неявно принимает входные данные z и, согласно руководству, генерирует ближайший простое число, строго большее, чем z.
источник
Оазис , 2 байта
Беги с
-n
флагом.Код:
Попробуйте онлайн!
источник
Bash + coreutils, 52 байта
Попробуйте онлайн!
В документации по bash и factor не указывается максимальное целочисленное значение, которое они могут обработать (хотя на практике каждая реализация имеет максимальное целочисленное значение). Предположительно, в GNU будущего на ваших бесконечно больших машинах bash и factor будут иметь целые числа неограниченного размера.
источник
Максима, 10 байт
Функция возвращает наименьшее простое число, большее, чем ее аргумент.
источник
Брахилог , 2 байта
Попробуйте онлайн!
объяснение
источник
Python с симпой, 28 байт
sympy.nextprime
это функция, которая делает то, что говорит на банке. Работает на все поплавки.repl.it
Python,
6659 байт-4 байта благодаря Lynn (используйте
-~
)-3 байта благодаря FlipTack (используйте
and
иor
, позволяя...==1
переключиться на...-1
состояние.)repl.it
Рекурсивная функция, которая считает от
n
простого числа тех пор, пока не будет найдено простое число, проверяя, что существует только одно числоn-1
, делающее его (т.е. 1). Работает для всех целых чисел, вызывает ошибку для чисел с плавающей запятой.Работает на 2.7.8 и 3.5.2, не работает на 3.3.3 (синтаксическая ошибка из-за недостатка места между
==1
иelse
)источник
(n+1)%(i+1)
есть-~n%-~i
, я думаю.and
/or
работает, напримерf=lambda n:sum(-~n%-~i<1for i in range(n))==1and-~n or f(n+1)
?f=lambda n:sum(-~n%-~i<1for i in range(n))-1and f(n+1)or-~n
Python,
11483 байтаБез встроенных, если они есть.
-30 путем удаления пробелов и -1 путем изменения
b%i==0
наb%i<1
источник
1
Perl 6 , 25 байт
Как это устроено
Perl 6 , 32 байта
С неэффективным пользовательским тестированием первичности.
Как это устроено
Внешняя структура такая же, как и выше, но предикат, переданный
first
(чтобы определить, является ли данное число простым), теперь:источник
.is-prime
;)Пайк,
87 байтПопробуй это здесь!
4 байта, неконкурентные
(Интерпретатор обновлен с момента публикации запроса)
Попробуй это здесь!
источник
J, 4 байта
Простой встроенный для следующего премьер.
источник
05AB1E ,
1613 байтов (Emigna @ -3 байта)Попробуйте онлайн!
источник
[>Dp#
сработает?Perl, 30 байт (29 +1 для
-p
):использование
Введите число после нажатия возврата (введите 12345 в примере ниже, выводит 12347):
Как это устроено
1
's, которая имеет длину++$_
, где$_
изначально находится входное значение1
s не простой длины (объяснено здесь ).++$_
)while
цикл завершается и-p
печатает значение$_
"1"
длины 1, потому что он никогда не будет использоваться для значений, меньших, чем1
в спецификации.источник
Java 7,
373343334303268 байт-75 байт спасибо @Poke
Ungolfed:
Попробуй это здесь.
Некоторые примеры ввода / вывода:
источник
static
поле и методp
, но удалив методc
иp
параметр.QBIC , 34 байта
Основанный на этом тестере первичности QBIC . Объяснение:
источник
JavaScript (ES7), 61 байт
использование
Выход
источник
MATL, 3 байта
Функция
Yq
возвращает следующее простое число абсолютного значения входного значения, если входное значение является отрицательным, поэтому мы неявно захватываем входное значение, отменяем его (_
) и находим следующее простое число, используяYq
.Попробуйте онлайн!
источник
Хаскелл,
424643 байтаобычный код для грубой силы.
Конечно, это находит следующее наименьшее простое число после
n
. Там не самый большой премьер.Работает при n > 0 .
Редактировать: Предполагается
n
, прост. Благодаря совету @Laikoni в комментариях .источник
head[...]
на[...]!!0
. Однако я думаю, что можно предположить, чтоn
это простое число, поэтому вы можете использовать[n..]
вместо,[n+1..]
а затем взять второй элемент с[...]!!1
.SimpleTemplate, 132 байта
Алгоритм ужасен, так как я должен сделать свой собственный код, чтобы проверить, является ли число простым или нет.
Это оказалось ужасно, но работает.
Получает число в качестве первого аргумента, выводя результат.
Ungolfed:
Любые советы о том, как удалить этот последний
@if
?источник
Луа, 876 байт
Lua, в отличие от некоторых других языков, имеет максимальный целочисленный размер. Как только число становится больше 2 32 , все перестает работать правильно, и Lua начинает пытаться делать оценки вместо точных значений.
Таким образом, мне пришлось реализовать новый метод хранения чисел, в частности, я сохранил их как строки Base10, потому что у Lua нет ограничения по размеру для строк, кроме размера памяти.
Я чувствую, что этот ответ гораздо больше относится к духу вопроса, поскольку он сам должен реализовывать произвольные целые числа точности, а также простой тест.
Разъяснения
Хотя в приведенном выше примере используются метатаблицы, а не просто обычные функции, такие как фактический ответ, который получился меньше.
источник
Рубин, 28 + 6 = 34 байта
Использует
-rprime
флаг.Нерекурсивная версия для 31 + 6 = 37 байт:
источник
Python + primefac ,
3432 байтаНе такой короткий, как использование
sympy
(другой ответ уже использует это), но он все еще довольно короткий и намного быстрее.Попробуйте онлайн
Ввод
2**2000
завершается за пару секунд.источник
Japt, 6 байт
Запустите его онлайн.
источник