Вызов
Это очень просто: если задано положительное целое число до 1 000 000, верните ближайшее простое число.
Если само число простое, то вы должны вернуть это число; если есть два простых числа, одинаково близких к предоставленному числу, верните меньшее из двух.
Входные данные представлены в виде одного целого числа, а выходные данные также должны быть в виде целого числа.
Мне все равно как вы берете на вход (функция, STDIN и т. Д.) Или отображать вывод (функция, STDOUT и т. Д.), Пока он работает.
Это кодовый гольф, поэтому применяются стандартные правила - выигрывает программа с наименьшим количеством байтов!
Тестовые случаи
Input => Output
------ -------
80 => 79
100 => 101
5 => 5
9 => 7
532 => 523
1 => 2
Ответы:
Gaia , 3 байта
Попробуйте онлайн!
Довольно медленно для больших входов, но работает, если достаточно памяти / времени.
Я не уверен, почему
D⌡
неявно толкаетz
снова, но это делает это удивительно короткий ответ!источник
JavaScript (ES6), 53 байта
Попробуйте онлайн!
комментарии
источник
05AB1E , 5 байтов
Попробуйте онлайн! или как тестовый набор
Неэффективно для больших чисел
источник
Ån
что « В случае ничьей верхний прайм отталкивается » Даже не знал, что у нас есть это встроенное, че.Октава , 40 байт
Попробуйте онлайн!
Здесь используется тот факт, что между
n
и всегда существует простое число2*n
( теорема Бертрана – Чебышева ).Как это работает
источник
Japt , 5 байт
Попробуйте или запустите все тесты
источник
05AB1E , 4 байта
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) , 31 байт
Попробуйте онлайн!
1000003 является 78499-м премьер.
Nearest
расставляет приоритеты значения, которые появляются ранее в списке (которые ниже).источник
Nearest[Prime@Range@#,#,1]&
для 27Брахилог ,
75 байтПопробуйте онлайн!
Сохранено 2 байта благодаря @DLosc.
объяснение
источник
≜
с самого начала, тогда как я думал о спаривании и вычитании и только позже понял, что мне нужно≜
заставить его работать. :)Pyth, 10 байт
Попробуйте онлайн здесь или проверьте все тестовые примеры сразу здесь .
источник
Желе ,
97 байтПопробуйте онлайн!
Медленно для большего ввода, но работает нормально для запрошенного диапазона. Спасибо @EriktheOutgolfer за сохранение 2 байтов!
источник
_A¥
сạ
(абсолютной разницей). Да, иḤ
действительно может быть‘
.‘
не всегда работает? Это означает, что будут найдены только простые числа до n + 1, а ближайшим может быть n + 2.Python 2 , 71 байт
Попробуйте онлайн!
Рекурсивная функция, использующая простой генератор теоремы Вильсона .( к - 1 ) !2 и
p
Треки продуктаp%k
1 для простых чисел и 0 для простых чисел. Чтобы упростить сравнениеabs(k-n)
для разных простых чиселk
, мы сохраняемk-n
и сравниваем с помощьюabs
добавления,n
чтобы получить результатk
.Выражение
k+n-p%k*2*n
предназначено для предоставленияk-n
простых чисел (гдеp%k=1
) и, в противном случае, «плохого» значения,k+n
которое всегда больше по абсолютной величине и поэтому не влияет на минимум, так что не простые числа передаются.источник
C (gcc) ,
87767472 байтаОптимизация innat3's C # (интерактивный компилятор Visual C #), 100 байт
Попробуйте онлайн!
источник
r!=2
эквивалентноr-2
,n%++i?0:r++
скорее всего , может бытьn%++i||r++
.Приборка , 43 байта
Попробуйте онлайн!
объяснение
Это лямбда с параметром
x
. Это работает путем создания следующей последовательности:Это соединение двух последовательностей
]x, -1, -∞]
(закрыто слева, открыто справа) и[x, ∞]
(оба открыто).Ибо
x = 80
это выглядит так:Затем мы используем,
f↦s
чтобы выбрать все элементы изs
удовлетворенияf
. В этом случае мы отфильтровываем все составные числа, оставляя только простые. Для того жеx
, это становится:Затем мы используем
(...)@0
для выбора первого члена этой последовательности. Поскольку необходимо выбрать нижнюю из двух, последовательность, которая начинается сx - 1
, объединяется первой.Примечание: только один из
x
иx - 1
может быть простым, так что все в порядке, что объединенная последовательность начинается сx - 1
. Хотя последовательность может быть открыта с обеих сторон ([x,-1,-∞]
), это будет включатьx
в нее два раза. Таким образом, ради «эффективности» я выбрал закрытую левую версию (также потому, что мне нравится хвастаться Tidy).источник
Фактор , 91 байт
Попробуйте онлайн!
источник
APL (Dyalog Extended) ,
2015 байтов SBCSФункция молчаливого префикса, вдохновленная ответом Галена Иванова .
Попробуйте онлайн!
⍳
Один раз через аргумент.¯2⍭
n-е простые числа⊢(
…)
Примените к нему следующую неявную функцию с исходным аргументом в качестве левого аргумента:⊢
простые числа⊇
индексируется:⍋
восходящих классов (индексы , которые будут сортировать по возрастанию)⍤
по|
амплитудной (абсолютное значение)⍤
из-
различий⊃
выберите первый (то есть тот, у которого наименьшая разница)источник
Perl 6 , 35 байт
Попробуйте онлайн!
При этом используется метод Вейтселя для генерации списка,
0, -1, 2, -3
но он значительно упрощает($*=-1)*$++
использование анонимных переменных состояния, доступных в P6 (у меня изначально было-1 ** $++ * $++
, но когда игра в гольф отрицательная теряет приоритет). Есть встроенная первичная проверка, но, к сожалению, онаuntil
предотвращает автоматически возвращаемое значение, так что есть дополнительное$_
зависание.источник
C
122121104 байтаИспользуйте его, вызывая функцию
c()
и передавая в качестве аргумента число; он должен вернуть ближайший штрих.Спасибо «Воплощению невежества» за
1 байт сохраненобольшое улучшение.Попробуйте онлайн!
источник
c()
получает два параметра ... Кроме того, вы, вероятно, можете сократитьwhile(1)
доfor(;;)
(непроверенный, так как я не понимаю, как запустить ваш кодc()
передачу только первый параметр. И вы правы,for(;;)
экономите мне байт, осталось всего 117, чтобы получить первое место :)#define r return p(a,i){i=1;while(++i<a)if(a%i<1)r 0;r a>1;}c(a,b){b=a;for(;;b++){if(p(--a))r a;if(p(b))r b;}}
. Вот ссылка TIOWolfram Language (Mathematica) , 52 байта
Попробуйте онлайн!
источник
APL (NARS), 38 символов, 76 байтов
0π - критерий простого числа, ¯1π - предыдущего простого числа, 1π - следующего простого числа; тест:
источник
J ,
1915 байтПопробуйте онлайн!
источник
Perl 5 , 59 байт
Попробуйте онлайн!
/^.?$|^(..+?)\1+$/
сложно регулярное выражение, чтобы проверить премьер(-1)**$a*($a++)
генерировать последовательность 0, -1, 2, -3 ...источник
MathGolf , 10 байт
Попробуйте онлайн.
Объяснение:
источник
Python 2 (Cython) , 96 байт
Попробуйте онлайн!
источник
r=range;...
C # (интерактивный компилятор Visual C #) ,
104100 байтПопробуйте онлайн!
Объяснение:
источник
Java 8,
8887 байтПорт ответа @NaturalNumberGuy (первый) на C , так что убедитесь, что проголосовали за него !!
-1 байт благодаря @ OlivierGrégoire .
Попробуйте онлайн.
Объяснение:
источник
Java (JDK) , 103 байта
Попробуйте онлайн!
источник
;
. :) Вы хотите, чтобы я удалил свой ответ? .. Не стесняйтесь копировать объяснение.Haskell ,
7974 байта (спасибо Лайкони)72 байта в качестве функции annonymus (в этом случае можно удалить начальное «f =»).
Попробуйте онлайн!
оригинальный код:
Попробуйте онлайн!
Объяснение:
источник
,
вместо&&
.(last$ ...)
может бытьlast(...)
, и вторая защита1>0
может использоваться для привязки, чтобы сохранить круглые скобки, напримерy<-x+n
.f=
не нужно считать начальные значения . Также скобки(-1+n)
могут быть удалены.VDM-SL , 161 байт
Полная программа для запуска может выглядеть следующим образом - стоит отметить, что границы набора используемых простых чисел, вероятно, следует изменить, если вы действительно хотите запустить это, так как для запуска 1 миллиона потребуется много времени:
Объяснение:
источник
MATL , 6 байтов
Попробуйте онлайн!
Перечислите первые
n
простые числа и найдите ближайший кn
.источник
C # (интерактивный компилятор Visual C #) , 112 байт
Попробуйте онлайн!
Сдвиг влево при отправке на 20, а в TIO на 10, так что TIO завершается для тестовых случаев.
источник