Основной разрыв - это разница между двумя последовательными простыми числами. Более конкретно, если p и q являются простыми числами с p < q и p +1, p +2, ..., q −1 не являются простыми числами, простые числа p и q определяют промежуток n = q - p . Говорят, что разрыв начинается с p и имеет длину n .
Известно, что существуют сколь угодно большие простые промежутки. То есть, если дано n, существует простой промежуток длины n или больше. Тем не менее, простой промежуток длины ровно n может не существовать (но больший будет).
Соревнование
Учитывая положительное целое число n
, выведите первое простое число, которое начинается с промежутка длины n
или больше.
Например, для ввода 4
должен быть вывод 7
, потому что 7 и 11 являются первыми последовательными простыми числами, которые отличаются как минимум на 4 (предыдущие пробелы: 1, от 2 до 3; 2, от 3 до 5; и 2, от 5 до 7). Для ввода 3
также должен быть указан ответ 7
(пробелов длины 3 нет).
Дополнительные правила
Алгоритм теоретически должен работать для сколь угодно высокого
n
. На практике это приемлемо, если программа ограничена временем, памятью или размером типа данных.Ввод и вывод могут быть приняты любым разумным способом .
Программы или функции разрешены на любом языке программирования . Стандартные лазейки запрещены.
Самый короткий код в байтах побеждает.
Контрольные примеры
Input -> Output
1 2
2 3
3 7
4 7
6 23
10 113
16 523
17 523
18 523
30 1327
50 19609
100 370261
200 20831323
источник
Ответы:
Gaia , 6 байт
Это крайне неэффективно (
16
тестовый пример занял более часа, чтобы вычислить на моей машине).Попробуйте онлайн!
объяснение
Последовательность, по-видимому, обладает свойством a (n) <= 2 ^ n .
источник
Желе ,
10, 9, 810 байтПопробуйте онлайн!
Два байта сохранены благодаря @Dennis! (а затем добавлен обратно из-за крайних случаев)
Объяснение:
источник
#
отсчитаем от ввода здесь) Кажется разумным предположить это, но я, например, понятия не имею, является ли это допустимым предположением. РЕДАКТИРОВАТЬ: FYI исправить (если необходимо) префикс с2ð
Mathematica, 30 байт
Попробуйте онлайн!
Mathematica, 35 байт
Попробуйте онлайн!
Mathematica, 77 байт
источник
p
и другоеq
- простое ... Однако первый код кажется неверным, потому что он поднимается только до 65535, если вы явно не передаете аргументMaxIterations
.(For[t=2,NextPrime@t-t<#,t++];t)&
Haskell ,
106 102 93 77 7372 байтаЭто создает бесконечный список простых чисел, а затем ищет простые промежутки. Основной список был взят отсюда . Это, вероятно, можно сократить, но я еще не понял, как :)
Спасибо @BruceForte за -4 байта и @Zgrab за -1 байт!
Попробуйте онлайн!
источник
zip=<<tail$[...]
сохраняет байт.n
это прекратится через некоторое время :) (Haskell - не процедурный, а функциональный язык с ленивой оценкой.)Pyth - 14 байт
Он фильтрует из [1, inf), фильтруя по primality (
P_
), и что следующее простое число, отфильтрованное из (n, inf), имеет другое> = для входа.Тестовый пакет .
источник
PowerShell ,
979691 байтПопробуйте онлайн!
Принимает input
$n
, устанавливает$a
и$b
равняется2
, затем входит в бесконечныйfor
цикл. Внутри мы зацикливаемся,$b
пока не доберемся до следующего прайма . Затем мы проверяем, является ли$b-$a
(то есть, разрыв)-g
повторным илиe
качественным$n
. Если это так, мы выводим$a
иexit
. В противном случае мы устанавливаем$a
быть$b
и прибавка$b
и начать наш следующий поиск.Предупреждение: это медленно для большого ввода. Фактически, он не может завершить
50
или более высокие тесты в течение тайм-аута 60-х на TIO. Ну что ж.источник
Шелуха ,
131110 байтПопробуйте онлайн!
источник
Mathematica, 39 байт
33-байтовая версия (недействительна, потому что она поднимается только до 65535-го простого числа)
источник
Python 2 ,
9688 байт- 8 байт благодаря @Maltysen
Попробуйте онлайн!
источник
Perl 6 , 63 байта
Попробуйте онлайн!
источник
Mathematica, 37 байт
Function
с первым аргументомg
. Начиная с2
, применяет функциюp=NextPrime
многократно, покаp@#-#<g&
даетTrue
(разрыв между текущим простым и следующим простым меньше, чемg
).источник
R + gmp, 55 байт
Использует функцию nextprime из библиотеки gmp
источник
cat(s)
в конце. Неявная печать не работает в полных программах.Рубин , 61 байт
Попробуйте онлайн!
источник
С =
141109 байт; C ++, D = 141 байт; C #, Java = 143 байтаВНИМАНИЕ : НИЗКИЙ АЛГОРИТМ РАБОТЫ
Этот код не смог рассчитать основной разрыв в
g(200)
течение 10 минут. Дляg(100)
этого потребовалось 10 секунд (версия C ++)C ++ и D версия:
C # и версия Java:
C-версия, -32 байта, благодаря floorcat:
Различия между версиями C # / Java и C / C ++ / D:
!p(n)
<==>p(n)==0
источник
return 0; return 1
и убрать!
доp(++n)
d%i==0
и!(d%i)
может бытьd%i<0
. Кроме того , используя двойки системы шаблонов решения в D может быть:T p(T)(T d){for(T i=2;i<=d/2;++i)if(d%i<1)return 0;return 1;}T g(T)(T d){T f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;
. (Удаление скобок послеfor
иdo
может также относиться к C ++)int p(int d){for(int i=2;i<=d/2;++i)if(!(d%i))return 0;return 1;}int g(int d){int f=2,n=3;while(n-f<d){f=n;do++n;while(!p(n));}return f;}
<- это должно работать для версии C ++D
127125122 байтаВНИМАНИЕ: НИЗКИЙ АЛГОРИТМ ЭФФЕКТИВНОСТИ !!
Попробуйте онлайн!
Как?
HatsuPointerKun еще раз, но я сделаю D-колдовство.
T p(T)(T d)
и короче C ++r=d%i++<1||r
, D конкретные махинации, может работать в C / C ++, но я не знаю.p(++n)
так же, как и выше, не уверен, что он работает в C / C ++while(p(++n)){}
, здесь видно, почему D плохо играет в гольф, его нельзя использовать;
как пустое утверждение.источник
Perl 6 ,
4137 байтПопробуйте онлайн!
объяснение
источник
QBIC , 28 байт
объяснение
источник
05AB1E , 9 байтов
Попробуйте онлайн или проверьте все контрольные примеры . (Test Suite не содержит последние два тестовых случая, потому что время ожидания TIO для них.)
Так как другой вопрос закрыт для меня, я также публикую свой ответ здесь.
Объяснение:
источник
Java 8,
9992 байтаПопробуйте онлайн. (Самый большой тестовый случай исключен, потому что он истекает в TIO.)
Объяснение:
источник
Приборка , 33 байта
Попробуйте онлайн!
Или 28 символов / 34 байта:
{x:({v:⊟v≤-x}↦primes+2)@0@0}
Я объясню это, используя эквивалентный эквивалент ASCII:
источник
APL (NARS), 36 символов, 72 байта
1π - функция «следующий штрих»; тест:
источник