Редивозит - это слово портманто, придуманное для единственной цели этого вызова. Это смесь сокращения, деления и составного.
Определение
Дано целое число N> 6 :
- Если N простое, N не является перенаправляющим числом.
- Если N является составным:
- многократно вычислять N '= N / d + d + 1 до тех пор, пока N не станет простым, где d - наименьший делитель N, больший 1
- N - это противоположное число, если и только если конечное значение N ' является делителем N
Ниже приведены 100 первых номеров повторяющихся номеров (нет записи OEIS на момент публикации):
14,42,44,49,66,70,143,153,168,169,176,195,204,260,287,294,322,350,414,462,518,553,572,575,592,629,651,702,726,735,775,806,850,869,889,891,913,950,1014,1023,1027,1071,1118,1173,1177,1197,1221,1235,1254,1260,1302,1364,1403,1430,1441,1554,1598,1610,1615,1628,1650,1673,1683,1687,1690,1703,1710,1736,1771,1840,1957,1974,2046,2067,2139,2196,2231,2254,2257,2288,2310,2318,2353,2392,2409,2432,2480,2522,2544,2635,2640,2650,2652,2684,2717,2758,2760,2784,2822,2835
Примеры
- N = 13 : 13 простое число, поэтому 13 не является повторяющимся числом
- N = 32 : 32/2 + 3 = 19; 19 не является делителем или 32, поэтому 32 не является перенаправляющим числом
- N = 260 : 260/2 + 3 = 133, 133/7 + 8 = 27, 27/3 + 4 = 13; 13 - это делитель или 260, поэтому 260 - это число с повторным значением
Твое задание
- Если задано целое число N , вернуть истинное значение, если это число с повторным значением или ложное значение в противном случае. (Вы также можете вывести любые два различных значения, если они согласованы.)
- Вход гарантированно будет больше 6 .
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
code-golf
decision-problem
integer
division
Arnauld
источник
источник
a(n)
напрямую, либо потому, что вы можете вычислить термин из предыдущих). Спасибо, Арно, за изменение задачи. :)Ответы:
Хаскелл,
918583807574 байтаПопробуйте онлайн!
Изменить: -2 байта благодаря @BMO, -3 байта благодаря @ H.PWiz и
-5-6 байтов благодаря @ Ørjan Johansenисточник
Шелуха , 14 байт
Попробуйте онлайн!
-3 спасибо H.PWiz .
источник
Ω
Γ
...Γ
, учитывая список [a, b, c ...] будет применяться~+→Π
кa
и[b,c...]
.~+→Π
добавляетa+1
кproduct[b,c...]
.a
это наименьший делитель,product[b,c...]
этоN/d
C (gcc) ,
9489 байтПопробуйте онлайн!
объяснение
источник
Желе , 14 байт
Попробуйте онлайн!
Как это работает
источник
Python 2 ,
9791 байтПопробуйте онлайн!
Выходы через код выхода.
Ungolfed:
Попробуйте онлайн!
источник
05AB1E ,
1716 байтПопробуйте онлайн!
объяснение
источник
Pyth , 20 байтов
Попробуй это здесь!
Как это работает
И первые 4 байта (
<P_Q
) просто проверяют, не является ли ввод простым.С помощью Emigna мне удалось сэкономить 3 байта.
источник
head(P)
вместоfiITZ2
детали, так как наименьший делитель больше 1 всегда будет простым?Python 3 , 149 байт
Попробуйте онлайн!
Использование ситового подхода. Должно быть быстрым (
O(N log log N)
= временная сложность сита Эратосфена) даже при большомN
(но сохраняетO(N)
целые числа в памяти)Заметка:
n
не превышаютN
, иN > 7
p
могут быть использованыrange(2,N)
вместоrange(2,N+1)
просеивания./
не работает,//
должен использоваться из-за индекса списка.range
сожалению, сохранение в другую переменную не помогает.Объяснение:
-~N
==N+1
.s
инициализируетсяN+1
нулями (Python 0-индексация, поэтому индексы0..N
)s[n]
Ожидается, что после инициализации будет,0
еслиn
простое число, иp
дляp
минимального простого числа, которое делит,n
еслиn
является составным.s[0]
иs[1]
ценности не важны.Для каждого
p
в диапазоне[2 .. N-1]
:s[p] < 1
(то естьs[p] == 0
), тоp
это простое число, и для каждогоq
, кратногоp
иs[q] == 0
, присваиватьs[q] = p
.Последние 2 строки просты, за исключением того, что
n//s[n]-~s[n]
==(n // s[n]) + s[n] + 1
.Python 3 , 118 байт
Попробуйте онлайн!
За счет чуть худшей производительности. (Это работает во
O(N log N)
временной сложности, при условии разумной реализации фрагментов Python)Эквивалентная полная программа составляет 117 байт .
источник
n//s[n]-~s[n]
вместоn//s[n]+s[n]+1
149 байтов.or p
может быть|p
or p
выполняет логическое или, в то время как|p
выполняет побитовое или. То естьa or b
естьb if a == 0 else a
.for
чтобы использовать срез вместо другогоfor
. Этоrange
обратное, поэтому более низкие индексы будут перезаписывать более крупные, и запуск слайса у2*p
вас не заменитs[0]
илиs[p]
.Haskell , 110 байт
Попробуйте онлайн!
Не очень счастлив ...
источник
Октава , 92 байта
Попробуйте онлайн!
источник
APL (Dyalog) , 50 байтов
Попробуйте онлайн!
источник
Japt,
2524 байтаБоюсь, что с этим я пошла не в ту сторону, но у меня не хватило времени попробовать другой подход.
Выходы
0
для ложного или1
истинного.Попытайся
источник
Perl 5 , 291 + 1 (-a) = 292 байта
Черт, Perl за то, что у него нет нативного главного контролера.
Неуправляемая версия,
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) , 64 байта
Простая реализация с использованием рекурсивной замены шаблона
(замена "\ [Divides]" на символ "∣" экономит 7 байт)
Попробуйте онлайн!
источник
Чисто ,
128117114 байтПопробуйте онлайн!
источник
J 35 байт
Попробуйте онлайн!
Минимальный делитель, являющийся первым простым фактором, был украден из решения Jelly @ Dennis (ранее я использовал
<./@q:
).Должен быть лучший способ выполнить итерацию, но я не могу его найти. Я думал о том, чтобы не делать тест на первичность (
^:(0&p:)
) и вместо этого использовать неблагоприятный, но кажется, что это будет немного дольше, так как вам понадобится_2{
некоторые изменения, которые могут не дать чистого сокращения.Я действительно чувствую, что должен быть способ избежать прощения с проверкой первичности.
Пояснение (расширенное)
источник
APL NARS, 43 символа, 85 байтов
(надеясь, что оно сойдет для всего числа> 6) test:
Идея использования 2 анонимных функций я получаю к другому решению Apl.
источник
Пыть , 44 байта
См. Приведенный ниже код для объяснения - единственные различия состоят в том, что (1) N уменьшается до того, чтобы учесть приращение в начале цикла, и (2) он использует NOR вместо OR.
Попробуйте онлайн!
Я сделал это, прежде чем перечитать вопрос и заметил, что он хотел только истинного / ложного.
Пыть, 52 байта
Печатает бесконечный список повторяющихся чисел.
Объяснение:
Попробуйте онлайн!
источник