Связанный: повторная функция phi (n) .
Ваша задача состоит в том, чтобы вычислить повторную функцию phi:
f(n) = number of iterations of φ for n to reach 1.
Где φ
находится Функция Эйлера .
Родственный OEIS .
Вот график этого:
Правила:
Ваша цель - выводить f(n)
из n=2
в n=100
.
Это код-гольф, поэтому выигрывает самый короткий код.
Вот значения, с которыми вы можете проверить:
1, 2, 2, 3, 2, 3, 3, 3, 3, 4, 3, 4, 3, 4, 4, 5, 3, 4, 4, 4, 4, 5, 4, 5, 4, 4, 4, 5, 4, 5, 5, 5, 5, 5, 4, 5, 4, 5, 5, 6, 4, 5, 5, 5, 5, 6, 5, 5, 5, 6, 5, 6, 4, 6, 5, 5, 5, 6, 5, 6, 5, 5, 6, 6, 5, 6, 6, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 6, 5, 6, 7, 5, 7, 5, 6, 6, 7, 5, 6, 6, 6, 6, 6, 6, 7, 5, 6, 6
code-golf
math
sequence
kolmogorov-complexity
number-theory
Просто Красивое Искусство
источник
источник
x
напримерphi(x)
конкретное фиксированное число.f(n)
, а не запускать его для ряда фиксированных чисел. Это также делает разницу между языками с возможностью применения функций в диапазонах с меньшим количеством байтов (частично вызов хамелеона?)Ответы:
Haskell ,
5352 байтаСпасибо Ними за сохранение 1 байта!
Попробуйте онлайн!
sum[1|1<-gcd n<$>[1..n]]
даетφ(n)
(взято из flawr , спасибо!)f
является рекурсивной функцией, которая вычисляет,1+φ(n)
если n нет1
, и выводит,0
еслиn
есть1
, так как больше нет итераций, которые необходимо выполнить для достижения1
Наконец
f<$>[2..100]
создает списокf
примененных к каждому элементу[2..100]
источник
Haskell ,
70 6968 байтЭта функция
(\n->sum[1|1<-gcd n<$>[1..n]])
является последней функцией, которую мы неоднократно применяем в анонимной функции. Спасибо @laikoni за -1 байт!РЕДАКТИРОВАТЬ: я только что узнал, что @xnor использовал эту точную totient функцию в предыдущем испытании .
Попробуйте онлайн!
источник
MATL ,
1615 байтПопробуйте онлайн!
объяснение
Старая версия, 16 байт
Попробуйте онлайн!
объяснение
источник
2 3 3 4 3
, когда1 2 2 3 2
Желе ,
1211109 байтПопробуйте онлайн!
-1 байт благодаря HyperNeutrino!
-1 байт благодаря мистеру Xcoder!
-1 байт благодаря Денису
Как это устроено
Поскольку это было сделано Деннисом, я (по понятным причинам) понятия не имею, почему это работает, просто так оно и есть.
источник
f(n)
от2
до100
, и вопрос не включает ввод, поэтому я думаю, что это правильная версияf
наn=2
кn=100
, а не только одно значение.#
в этом случае? Что - то вроде этого (который явно не работает , но написана кем - то , кто понимает синтаксис ясно!)€
обычно лучше, чем#
.APL (Dyalog) ,
502925 байтовСмотри, нет, встроенный туалет!
4 байта сохранены благодаря @ H.PWiz
Попробуйте онлайн!
Как?
По-видимому, сначала я выбрал более длинную (и более сложную) формулу totient. Смотрите историю изменений.
⍳⍵
-1
ton
⍵∨
- gcd withn
1=
- equal to 1?+/
- sum 'em allЭто тотент. Все остальное - обертка для counting (
1+∇
) и применения к range2..100
(¨1+⍳99
).источник
Mathematica, 44 байта
-10 байтов от @Misha Lavrov
-2 байта от @ user202729
Попробуйте онлайн!
источник
J REPL, 23 байта
Я не проверял, но это, вероятно, работает в обычном J, если вы определяете его как существительное (я играл в гольф на своем телефоне в REPL).
Встроенные модули, йо.
Я бы сказал, что есть как минимум 2-3 байта для сброса (один за другим из-за способа
a:
работы, необходимости использовать его|
в качестве функции и т. Д.).источник
+/*<:5&p:^:a:2+i.99
для 19 байт Попробуйте онлайн!"+
вместо"0
, чтобы он мог также стать<:#@(5&p:^:a:)"+i.99
+/1<a:5&p:2+i.99
a:
in your code? How does it work instead of^:
?(5&p:)^:a: m
can be done asa: 5&p: m
using the other definition of&
when a dyad is bonded with a noun and then called dyadically.JavaScript (ES6),
115...10499 bytesHard-coding might be shorter, but let's try a purely mathematical approach.
источник
Python 2, 80 bytes
Try it online!
источник
Python 2, 82 bytes
Try it online!
This uses the observations that:
f(a*b) = f(a) + f(b) - 1
, except the-1
is omitted ifa
andb
are both evenf(p) = f(p-1) + 1
whenp
is prime, withf(2)=1
These imply that if
n
has prime factorizationn = 2**a * 3**b * 5**c * 7**d * 11**e * ...
, thenf(n) = max(a,1) + b + 2*c + 2*d + 3*e + ...
, where eachp>2
in the factorization contributesf(p-1)
.I'm not sure if these continue to hold past
n=100
, but if they do, they give a way to define and calculatef
without usingφ
.источник
Bubblegum, 49 bytes
Try it online!
источник
PowerShell, 110 bytes
Try it online!
Математический подход.
На самом деле, просматривая его, очень похоже на ответ C , но разрабатывается самостоятельно. Создает массив
0
s, циклы от2
до100
, а затем вычисляетphi
с использованиемgcd
формулировки. Часть в конце (parens) сохраняет результат в$a
следующем цикле и помещает копию в конвейер, что приводит к неявному выводу.PowerShell, 112 байт
Попробуйте онлайн!
Hard кодировка. Ho-гул.
Короче, чем я мог получить математический подход примерно на 10-15 байтов.источник
Python 2 , 83 байта
Попробуйте онлайн!
Сочетания эвристический оценка с HARDCODED константой , которая корректирует каждую оценку либо как
-0
или-1
.источник
Шелуха ,
1017 байтПопробуйте онлайн!
Редактировать : +7 байт для фактического отображения функции по диапазону, который был запрошен, прежде чем это была только функция, вычисляющая A003434 .
объяснение
Следующие вычисления A003434 :
m(....)ḣ100
Часть просто отобразить эту функцию в диапазоне [2..100], не знаю , как я пропустил эту часть раньше: Sисточник
PHP, 98 байт
Попробуйте онлайн!
Я упаковал все цифры в двоичную строку. После распаковки, преобразования его в массив и последующего слияния массива мне нужно было только добавить 1,2 и добавить 6, так как они не подходят или вызывают появление контрольного кода.
источник
Perl 6 , 47 байт
Попробуйте онлайн!
источник
05AB1E , 11 байт
Попробуйте онлайн!
объяснение
источник
C 112 байтов
Ungolfed:
Попробуйте онлайн!
источник
Алюминий , 87 байт
Попробуйте онлайн!
объяснение
источник
Pyth, 38 байт (неконкурентный)
Попробуйте это на Pyth Herokuapp , потому что он не работает на TIO по любой причине.
Я не сомневаюсь, что явное решение Pyth меньше, но я хотел посмотреть, насколько маленьким я мог бы получить код, сжимая последовательность, и выучить Pyth, я думаю. При этом используется тот факт, что верхняя граница последовательности
log2(n)+1
.объяснение
Я получил сжатую строку через
Ci_.e+1-sl+1ksb"122323333434344534444545444545555545455645555655565646555656556656665656565656656757566756666667566"3
, которая является противоположностью приведенного выше кода с несколькими преобразованиями типов.источник
Ом v2 , 41 байт
Попробуйте онлайн!
Буквально полностью закодированный ... Я фактически взял приведенную выше последовательность, удалил все, что не было числом, интерпретировал его как основание 8, а затем превратил его во встроенное представление числа 255 Ома. Это то, что делают цитаты. Затем программа просто превращает это в базу 8 снова.
источник