A função de Landau ( OEIS A000793 ) fornece a ordem máxima de um elemento do grupo simétrico . Aqui, a ordem de uma permutação é o menor número inteiro positivo modo que é a identidade - que é igual ao múltiplo menos comum dos comprimentos dos ciclos na decomposição do ciclo de permutação. Por exemplo, que é alcançado, por exemplo, por (1,2,3) (4,5,6,7) (8,9,10,11,12,13,14).
Portanto, é também igual ao valor máximo de em que com inteiros positivos.
Problema
Escreva uma função ou programa que calcule a função do Landau.
Entrada
Um número inteiro positivo .
Resultado
, a ordem máxima de um elemento do grupo simétrico .
Exemplos
n g(n)
1 1
2 2
3 3
4 4
5 6
6 6
7 12
8 15
9 20
10 30
11 30
12 60
13 60
14 84
15 105
16 140
17 210
18 210
19 420
20 420
Ponto
Este é o código-golf : O programa mais curto em bytes vence. (No entanto, as implementações mais curtas em vários idiomas são bem-vindas.)
Observe que não há requisitos impostos no tempo de execução; portanto, sua implementação não precisa necessariamente ser capaz de gerar todos os resultados do exemplo acima em um tempo razoável.
As brechas padrão são proibidas.
fonte
Max[Apply@LCM/@IntegerPartitions@#]&
estou familiarizado com o idioma - mas parece funcionar para mim e daria 36 bytes se estiver correto.Max[LCM@@@IntegerPartitions@#]&
para 31 bytes , porque@@@
fazApply
no nível 1.Python , 87 bytes
Experimente online!
Uma função recursiva que rastreia o restante
n
da partição e o LCM em execuçãod
. Observe que isso significa que não precisamos rastrear os números reais na partição ou quantos deles usamos. Tentamos cada parte possíveln-m
, substituindon
pelo que restam
ed
porlcm(d,n-m)
. Tomamos o máximo desses resultados recursivos e ded
si mesmos . Quando nada restan=0
, o resultado é apenasd
.O mais complicado é que o Python não possui nenhum built-in para LCM, GCD ou fatoração principal. Para isso
lcm(d,m-n)
, geramos uma lista de múltiplos ded
e obtemos o valor atingindo o módulo mínimon-m
, ou seja, comkey=(n-m).__rmod__
. Comomin
dará o valor anterior em caso de empate, esse é sempre o primeiro múltiplo diferente de zerod
que é divisível porn-m
, portanto, seu LCM. Temos apenas múltiplos ded
até ad*(n-m)
garantia de atingir o LCM, mas é mais curto para escreverd<<n
(que éd*2**n
) o que é suficiente, sendo os limites superiores do Python exclusivos.A
math
biblioteca do Python 3 temgcd
(mas nãolcm
) depois do 3.5, que é alguns bytes mais curto. Agradecemos a @Joel por reduzir a importação.Python 3.5 ou superior , 84 bytes
Experimente online!
Usando
numpy
'slcm
é ainda mais curto.Python com numpy , 77 bytes
Experimente online!
fonte
from math import*
é 85 bytes e usarimport math
+math.gcd(...)
é 84 bytes. O mesmo se aplica anumpy
.numpy
O comprimento de 5 é o ponto de equilíbrioimport*
.import numpy
porquenumpy.max
substituiria o built-in do Pythonmax
(o mesmo paramin
) sefrom numpy import*
for usado. Não causa problemas aqui, mas todos sabemos queimport*
não é uma boa prática de programação em geral.import*
seja sem dúvida uma má prática, não acho que ele substitua o Pythonmin
emax
, portanto, a confusão seria alguém esperando a função de numpy e obtendo a base.Haskell , 44 bytes
Experimente online!
fonte
Geléia , 7 bytes
Experimente online!
Um link monádico usando um número inteiro como argumento e retornando um número inteiro.
Explicação
fonte
JavaScript (ES6), 92 bytes
Experimente online!
JavaScript (ES6), 95 bytes
Experimente online!
Quão?
Nós definimos:
(este é A008475 )
Em seguida, usamos a fórmula (de A000793 ):
fonte
Perl 6 , 50 bytes
Experimente online!
Verifica todas as permutações diretamente, como a solução Ruby do histocrat.
Explicação
1 Podemos usar qualquer sequência de n itens distintos para a verificação, portanto, simplesmente fazemos a própria permutação.
2 Se o terminal for um contêiner, o
...
operador de sequência será compatível com o primeiro item. Portanto, temos que passar uma lista de elemento único.fonte
Ruby , 77 bytes
Experimente online!
(1..)
A sintaxe do intervalo infinito é muito nova para o TIO, portanto, o link define um limite superior arbitrário.Isso usa a definição direta - enumere todas as permutações possíveis e, em seguida, teste cada uma delas mudando
a
até que ela retorne à sua posição original (o que também significa convenientemente que eu posso apenas alterar a matriz original em cada loop).fonte
Gaia ,
252322 bytesExperimente online!
Não ter partições LCM ou inteiras torna essa abordagem bastante longa.
fonte
Haskell,
7067 bytesExperimente online!
Edit: -3 bytes graças a @xnor.
fonte
mapM(:[1..n])
, já que o elemento extra é inofensivo.Python 3 + numpy,
11510299 bytes-13 bytes graças a @Daniel Shepler
-3 bytes a mais de @Daniel Shepler
Experimente online!
Método da força bruta: encontre todas as seqüências possíveis a, b, c, ... em que a + b + c + ... = n e escolha a que tiver o lcm mais alto.
fonte
c
para retornar um conjunto e memorizar, ele não funciona mal (apesar de admitir que faz um pouco de besteiraPitão ,
2415 bytesExperimente online!
-9 bytes: preste atenção e notei que o Pyth realmente possui um GCD embutido (
i
).fonte