Relacionado: Função phi (n) iterada .
Seu desafio é calcular a função phi iterada:
f(n) = number of iterations of φ for n to reach 1.
Onde φ
está a função totiente de Euler .
OEIS relacionado .
Aqui está o gráfico:
Regras:
Seu objetivo é gerar saída f(n)
de n=2
para n=100
.
Isso é código-golfe, então o código mais curto vence.
Aqui estão os valores que você pode verificar:
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
Arte simplesmente bonita
fonte
fonte
x
comophi(x)
um número fixo específico.f(n)
, em vez de executá-la em um intervalo de números fixos. Isso também faz uma diferença entre línguas com capacidade de aplicar funções em faixas com menos bytes (parcialmente desafio camaleão?)Respostas:
Haskell ,
5352 bytesObrigado nimi por economizar 1 byte!
Experimente online!
sum[1|1<-gcd n<$>[1..n]]
dáφ(n)
(Retirado de flawr , obrigado!)f
é uma função recursiva que calcula1+φ(n)
se n não é1
e gera0
sen
for1
, pois não há mais iterações a serem tomadas para alcançar1
Por fim,
f<$>[2..100]
cria uma lista def
aplicada a cada elemento do[2..100]
fonte
Haskell ,
70 6968 bytesA função
(\n->sum[1|1<-gcd n<$>[1..n]])
é a função totiente, que aplicamos repetidamente na função anônima. Obrigado @laikoni por -1 byte!EDIT: Acabei de descobrir que o @xnor usou essa função exata em um desafio anterior .
Experimente online!
fonte
MATL ,
1615 bytesExperimente online!
Explicação
Versão antiga, 16 bytes
Experimente online!
Explicação
fonte
2 3 3 4 3
, quando o desafio diz que eles devem ser1 2 2 3 2
Geléia ,
1211109 bytesExperimente online!
-1 byte graças ao HyperNeutrino!
-1 byte graças ao Sr. Xcoder!
-1 byte graças a Dennis
Como funciona
Como isso foi feito por Dennis, eu (compreensivelmente) não tenho idéia do por que isso funciona, apenas o faz.
fonte
f(n)
partir2
para100
, ea questão não menciona entrada, então eu acho que esta é a versão corretaf
paran=2
an=100
, não apenas um valor.#
neste caso? Algo como este (que claramente não funciona, mas escrito por alguém que entenda a sintaxe claramente!)€
geralmente é melhor que#
.APL (Dyalog) ,
502925 bytesOlha, não, nenhum totiente embutido!
4 bytes salvos graças a @ H.PWiz
Experimente online!
Quão?
Aparentemente, eu fui primeiro à fórmula mais longa (e mais difícil). Veja o histórico de revisões.
⍳⍵
-1
paran
⍵∨
- gcd comn
1=
- igual a 1?+/
- soma todosEste é o totiente. Todo o resto é invólucro para a contagem (
1+∇
) e a aplicação no intervalo2..100
(¨1+⍳99
).fonte
Mathematica, 44 bytes
-10 bytes de @Misha Lavrov
-2 bytes de @ user202729
Experimente online!
fonte
J REPL, 23 bytes
Eu não verifiquei, mas isso provavelmente funciona no J regular, se você o definir como substantivo (joguei isso no meu telefone no REPL).
Built-ins, você.
Eu diria que existem pelo menos 2 a 3 bytes para raspar (um a um por causa do modo como
a:
funciona, tendo que usar|
como noop etc.).fonte
+/*<:5&p:^:a:2+i.99
por 19 bytes Experimente online!"+
em vez de"0
, por isso poderia tornar-se igualmente<:#@(5&p:^:a:)"+i.99
+/1<a:5&p:2+i.99
a:
no seu código? Como funciona em vez de^:
?(5&p:)^:a: m
pode ser feitoa: 5&p: m
usando a outra definição de&
quando uma díade está ligada a um substantivo e depois chamada diádica.JavaScript (ES6),
115...10499 bytesA codificação embutida pode ser mais curta, mas vamos tentar uma abordagem puramente matemática.
fonte
Python 2 , 80 bytes
Experimente online!
fonte
Python 2 , 82 bytes
Experimente online!
Isso usa as observações de que:
f(a*b) = f(a) + f(b) - 1
, exceto que o-1
é omitido sea
eb
ambos são paresf(p) = f(p-1) + 1
quandop
é primo, comf(2)=1
Isso implica que, se
n
houver fatoração primárian = 2**a * 3**b * 5**c * 7**d * 11**e * ...
, entãof(n) = max(a,1) + b + 2*c + 2*d + 3*e + ...
, onde cadap>2
fatoração contribuif(p-1)
.Não tenho certeza se eles continuam se mantendo
n=100
, mas se o fizerem, eles dão uma maneira de definir e calcularf
sem usarφ
.fonte
Chiclete , 49 bytes
Experimente online!
fonte
PowerShell , 110 bytes
Experimente online!
Abordagem matemática.
Na verdade, olhando através dele, muito semelhante à resposta C , mas desenvolvido de forma independente. Cria uma matriz de
0
s, passa de2
para100
e depois calculaphi
usando agcd
formulação. A parte em parênteses no final salva o resultado na$a
próxima rodada e coloca uma cópia no pipeline, o que resulta na saída implícita.PowerShell, 112 bytes
Experimente online!
Codificado. Ho-hum.
Mais curto do que eu poderia obter uma abordagem matemática em cerca de 10 a 15 bytes.fonte
Python 2 , 83 bytes
Experimente online!
Combina uma estimativa heurística com uma constante codificada que corrige cada estimativa como um
-0
ou outro-1
.fonte
Casca ,
1017 bytesExperimente online!
Edit : +7 bytes para realmente mapear a função no intervalo solicitado, antes que fosse apenas a função que computa A003434 .
Explicação
O seguinte calcula A003434 :
A
m(....)ḣ100
peça apenas mapeia essa função no intervalo [2..100], sem saber como eu a perdi antes: Sfonte
PHP, 98 bytes
Experimente online!
Coloquei todos os dígitos em uma sequência binária. Depois de descompactá-lo, convertê-lo em uma matriz e depois mesclá-la novamente, só precisei preceder o 1,2 e anexar o 6, pois esses não se encaixariam ou causariam a exibição de um código de controle.
fonte
Perl 6 , 47 bytes
Experimente online!
fonte
05AB1E , 11 bytes
Experimente online!
Explicação
fonte
C, 112 bytes
Ungolfed:
Experimente online!
fonte
Alumin , 87 bytes
Experimente online!
Explicação
fonte
Pitão, 38 bytes (não competitivo)
Experimente no Pyth Herokuapp , porque não funciona no TIO por qualquer motivo.
Não tenho dúvida de que a solução explícita do Pyth é menor, mas eu queria ver o quão pequeno poderia obter o código compactando a sequência e aprender o Pyth, eu acho. Isso usa o fato de que um limite superior da sequência é
log2(n)+1
.Explicação
Eu recebi a string compactada via
Ci_.e+1-sl+1ksb"122323333434344534444545444545555545455645555655565646555656556656665656565656656757566756666667566"3
, que é exatamente o oposto do código acima, com algumas conversões de tipo.fonte
Ohm v2 , 41 bytes
Experimente online!
Literalmente completamente codificado ... Na verdade, peguei a sequência acima, retirei tudo o que não era um número, interpretei como base 8 e depois a transformei na representação de número 255 da base de Ohm. É isso que as citações fazem. Então, o programa simplesmente transforma isso na base 8 novamente.
fonte