Un loop è una struttura algebrica piuttosto semplice. Si tratta di una tupla (G, +) dove G è un set e + è un operatore binario G × G → G . Cioè + prende due elementi da G e restituisce un nuovo elemento. L'operatore è inoltre tenuto a soddisfare due proprietà
Cancellazione: Per ogni un e b in G esiste unico x ed y in G tale che
a + x = b y + a = b
Identità: esiste una e in G tale che per ogni a in G
e + a = a a + e = a
Se hai familiarità con il concetto di un gruppo potresti notare che un ciclo è solo un gruppo che non ha una proprietà associativa.
I loop sono piuttosto semplici, quindi alla gente piace aggiungere più regole per rendere le nuove strutture più interessanti. Una tale struttura è un ciclo Moufang che è un ciclo che anche soddisfa le seguenti quattro identità forall x , y e z in G
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)
Ad esempio la seguente tabella Cayley rappresenta un ciclo Moufang:
0 1 2 3
1 0 3 2
2 3 0 1
3 2 1 0
(Se non si ha familiarità con una tabella Cayley è una matrice quadrata M in cui M i, j è uguale a i + j . È un modo pratico per rappresentare operatori binari su un set.)
Possiamo dimostrare che esiste un'identità piuttosto facilmente 0
. La cancellazione è un po 'più difficile da mostrare, ma un approccio a forza bruta produce questa tabella
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
Dove i nostri elementi sono le soluzioni
a + x = b = x + a
(Potresti notare che questo tavolo è identico al nostro tavolo Cayley. Lo lascerò come un esercizio al lettore per capire perché questo è il caso di questo ciclo Moufang)
Ora dobbiamo verificare le identità di Moufang per la nostra struttura. Esistono due modi per farlo per la particolare struttura, il primo modo è rendersi conto che è associativo e quindi soddisfa automaticamente i criteri, tuttavia questo non funzionerà in generale, quindi preferiremmo forzare il risultato con forza bruta. Ci sono 3 variabili libere ciascuna con un potenziale di 4 valori in ogni espressione qui. Ciò significa che dobbiamo eseguire calcoli 7 * 4 3 o 448. Lascerò fuori i calcoli grezzi ma ecco alcuni Haskell che puoi usare per verificarlo .
Compito
Dato un numero intero positivo n come output di input, il numero di loop Moufang con ordine n . (l'ordine di un gruppo è la dimensione dell'insieme)
Questo è code-golf, quindi le risposte verranno classificate in byte con un numero inferiore di byte migliori.
Casi test
Ecco il numero di loop Moufang per i primi 71 input
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
è 11
. Avrei dovuto rendermene conto perché 11
è il numero primo.