Um loop é uma estrutura algébrica bastante simples. É um tuplo (L, +) onde L é um conjunto e + é um operador binário G x L → L . Isso é + leva dois elementos da G e retorna um novo elemento. O operador também é obrigado a preencher duas propriedades
Cancelamento: Para cada a e b em G existe x e y únicos em G, de modo que
a + x = b y + a = b
Identidade: Existe um e em G tal que para cada a em G
e + a = a a + e = a
Se você estiver familiarizado com o conceito de grupo, poderá notar que um loop é apenas um grupo que não possui uma propriedade associativa.
Os loops são bem simples, então as pessoas gostam de adicionar mais regras para criar novas estruturas mais interessantes. Uma tal estrutura é um circuito Moufang que é um circuito que também satisfaz a seguinte quatro identidades forall x , y e z em L
z + (x + (z + y)) = ((z + x) + z) + y
((y + z) + x) + z = y + (z + (x + z))
(z + x) + (y + z) = (z + (x + y)) + z
(z + x) + (y + z) = z + ((x + y) + z)
Por exemplo, a seguinte tabela Cayley representa um loop Moufang:
0 1 2 3
1 0 3 2
2 3 0 1
3 2 1 0
(Se você não estiver familiarizado, uma tabela Cayley é uma matriz quadrada M, onde M i, j é igual a i + j . É uma maneira útil de representar operadores binários em um conjunto.)
Podemos mostrar que existe uma identidade facilmente 0
. O cancelamento é um pouco mais difícil de mostrar, mas uma abordagem de força bruta produz essa tabela
b a → 0 1 2 3
↓
0 0 1 2 3
1 1 0 3 2
2 2 3 0 1
3 3 2 1 0
Onde nossos elementos são as soluções para
a + x = b = x + a
(Você pode notar que esta tabela é idêntica à nossa tabela de Cayley. Vou deixar como um exercício para o leitor descobrir por que esse é o caso desse loop de Moufang)
Agora precisamos verificar as identidades de Moufang para nossa estrutura. Existem duas maneiras de fazer isso para a estrutura específica: a primeira maneira é perceber que ela é associativa e, portanto, preenche automaticamente os critérios; no entanto, isso não funcionará em geral, portanto, preferiríamos o resultado com força bruta. Existem 3 variáveis livres, cada uma com um potencial de 4 valores em todas as expressões aqui. Isso significa que precisamos executar 7 * 4 3 ou 448 cálculos. Vou deixar de fora os cálculos brutos, mas aqui está um Haskell que você pode usar para verificar isso .
Tarefa
Dado um número inteiro positivo n como entrada, o número de loops de Moufang que têm a ordem n . (a ordem de um grupo é o tamanho do conjunto)
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
Casos de teste
Aqui está o número de loops de Moufang para as primeiras 71 entradas
1,1,1,2,1,2,1,5,2,2,1,6,1,2,1,19,1,5,1,6,2,2,1,20,2,2,5,5,1,4,1,122,1,2,1,18,1,2,2,19,1,7,1,5,2,2,1,103,2,5,1,6,1,17,2,17,2,2,1,18,1,2,4,4529,1,4,1,6,1,4,1
12
não é 11
. Eu deveria ter percebido isso porque 11
é o número primo.