Одиночные простые числа (как я их называю) - это простые числа, где заданная числовая сетка с шириной w ≥ 3
- это простые числа, у которых нет других простых чисел, смежных с ними ортогонально или по диагонали.
Например, если мы возьмем эту сетку, где w = 12
(простые числа выделены жирным шрифтом):
1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20 21 22 23...
...86 87 88 89 90 91 92 93 94 95 96
97 98 99 100 101 102 103 104 105 106 107 108
109 110 111 112 113 114 115 116 117 118 119 120
Вы можете видеть, что только два простых числа 103 и 107 не имеют никаких простых чисел, ортогональных или диагональных. Я пропустил раздел, потому что там нет одиноких простых чисел. (кроме 37, на самом деле)
Ваша задача состоит в том, чтобы, учитывая два входа w ≥ 3
и i ≥ 1
определить первое одинокое простое число в числовой сетке с шириной w
, где указанное одинокое простое число должно быть больше или равно i
. Входные данные могут быть приняты в любом разумном формате (включая их как строки). Гарантируется, что по ширине будет одинокий штрих w
.
Сетка не оборачивается.
Примеры:
w i output
11 5 11
12 104 107
12 157 157
9 1 151
12 12 37
Поскольку это код-гольф , выигрывает самый короткий код!
w=12
не37
для одинокого прайма? Ни одно из чисел, окружающих его,{25, 26, 38, 49, 50}
не простое.Ответы:
C (gcc) ,
159158149 байтПопробуйте онлайн!
источник
JavaScript (ES6),
116104 байтаПринимает ввод в синтаксис карри
(w)(i)
.Контрольные примеры
Показать фрагмент кода
комментарии
источник
Python 2 , 144 байта
Попробуйте онлайн!
Аргументы в порядке:
w
,i
.Здесь не используются внешние модули.
Python 2 + sympy, 127 байт
Попробуйте онлайн!
Не заслуживает другого поста, так как единственное отличие здесь в том, что он использует
sympy.isprime
вместо реализованной вручную функции первичной проверки.источник
MATL , 38 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Код по существу состоит из цикла, который продолжает увеличивать сетку, как описано в тесте, одной строкой на каждой итерации.
После создания сетки на каждой итерации удаляется последняя строка (мы не можем знать, одиночны ли эти простые числа), а оставшиеся числа проверяются на наличие хотя бы одного простого числа. Это делается с помощью 2D свертки.
Если есть какое-то одиночное простое число, мы выходим из цикла и выводим первое такое простое число. В противном случае мы перейдем к следующей итерации, которая будет пытаться увеличить сетку.
(Код фактически использует транспонированную версию сетки, которая увеличивается столбцами, а не строками.)
источник
Юлия 0.6, 135 байтов
У TIO нет
Primes
пакета. Это на 5 байт короче, если мне разрешено возвращать все одинокие простые числа (findfirst
становитсяfind
). Попытка Джулии вывести функциональность из строяBase
наносит вред гольфу (не цель Джулии),Primes
была включена в 0.4.Ungolfed (в основном)
источник
Желе , 20 байт
Попробуйте онлайн!
Как это устроено
источник
Perl 6 ,
113104 байтаПопробуйте онлайн!
источник
Чисто ,
181... 145 байтПопробуйте онлайн!
Ungolfed:
источник
Желе ,
3029 байтЯ думаю, что это, вероятно, побиваемо с достаточным запасом
Двоичное звено, берущее
i
слева иw
справа, которое возвращает одинокое простое число.Попробуйте онлайн!
Как?
источник
Java 8, 176 байт
Порт Джонатана Фреха С ответ .
Попробуйте онлайн.
источник