В этой задаче мы узнали, как кодировать каждое положительное целое число, используя деревья факторов.
Вот как это работает:
Пустая строка имеет значение 1.
(S)
гдеS
любое выражение со значением S вычисляет S- е простое число.AB
гдеA
иB
являются arbirary выражения со значениями A и B соответственно , имеет значение A * B .
Например, если бы мы хотели представить 7, мы бы сделали
7 -> (4) -> (2*2) -> ((1)(1)) -> (()())
Оказывается, мы можем представить каждое целое число, используя этот метод. На самом деле некоторые цифры мы можем представить несколькими способами. Поскольку умножение коммутативно, 10 является одновременно
((()))()
а также
()((()))
В то же время некоторые числа могут быть представлены только одним способом. Взять 8 например. 8 можно представить только как
()()()
И поскольку все наши атомы одинаковы, мы не можем использовать коммутативность для их реорганизации.
Итак, теперь вопрос «Какие числа могут быть представлены только 1 способом?». Первое наблюдение - это то, что я только что начал делать там. Кажется, что совершенные силы обладают особыми свойствами. При дальнейшем исследовании мы можем найти 36, то есть 6 2 является идеальной степенью, но имеет несколько представлений.
(())()(())()
(())()()(())
()(())()(())
()(())(())()
()()(())(())
И это имеет смысл, потому что 6 уже переставляется, поэтому любое число, которое мы делаем из 6, также должно быть переставляемым.
Итак, теперь у нас есть правило:
- Число имеет уникальное представление, если оно является совершенной степенью числа с уникальным представлением.
Это правило может помочь нам уменьшить определение того, является ли составное число уникальным, чтобы определить, является ли простое число уникальным. Теперь, когда у нас есть это правило, мы хотим выяснить, что делает простое число уникальным. Это на самом деле довольно самоочевидно. Если мы берем уникальное число и заключаем его в круглые скобки, результат должен быть уникальным, и, наоборот, если n имеет несколько представлений, n- е простое число должно иметь несколько представлений. Это дает второе правило:
- П е простое единственно тогда и только тогда , когда п является уникальным.
Оба эти правила являются рекурсивными, поэтому нам понадобится базовый вариант. Какой самый маленький уникальный номер? Можно было бы сказать 2, потому что его просто ()
, но 1, пустая строка, еще меньше и уникальна.
- 1 уникален.
С помощью этих трех правил мы можем определить, имеет ли число уникальное дерево факторов.
задача
Возможно, вы видели, что он идет, но ваша задача - взять положительное целое число и определить, является ли оно уникальным. Вы должны написать либо программу, либо функцию, которая выполняет эти вычисления. Вы должны вывести одно из двух возможных значений, то, что это за значения, решать вам, но каждый должен представлять «да», будучи выводимым, когда вход является уникальным, и один должен представлять «нет», выводимый в противном случае.
Ваши ответы должны быть оценены в байтах с меньшим количеством байтов, тем лучше.
Контрольные примеры
Вот первая пара уникальных номеров:
1
2
3
4
5
7
8
9
11
16
17
19
23
25
27
31
Предлагаемые тестовые случаи
5381 -> Unique
Кажется, что OEIS A214577 так или иначе связан, поэтому, если вам нужно больше тестов, попробуйте там, но я не знаю, что они одинаковые, так что используйте на свой страх и риск.
Ответы:
Шелуха ,
1110 байтСохранено один байт благодаря Zgarb!
Возвращает
1
для уникального, в0
противном случаеПопробуйте онлайн! Или вернув первые 50
Объяснение:
источник
ȯp←
".ṁ¬
может быть только¬
потому, что список должен быть не пустым в этой ветви.Желе , 10 байт
После много возни!
Монадическая ссылка, принимающая положительное целое число и возвращающая,
1
если она уникальна или0
нет.Попробуйте онлайн!
Как?
Подождите, логарифм, что ?!
Давайте рассмотрим несколько примеров цикла.
Если
n=31
( 31 1 , одиннадцатое простое):Если
n=625
( 5 4 ):Если
n=225
( 5 2 × 3 2 ):источник
APL (Dyalog) , 42 байта
Использование
⎕CY'dfns'
сdfns
es не очень выполнимо на tio.источник
Желе , 11 байт
Попробуйте онлайн!
-2 благодаря очень гениальному трюку Джонатана Аллана .
Используя алгоритм Хаска Х.П.
источник
None
вы можете сделатьÆfẋE$ḢÆCµl¿
для 11 :)Пари / ГП , 49 байт
Попробуйте онлайн!
источник