Se definiamo una sequenza simile a Fibonacci come f k (n) = (f k (n-1) + f k (n-2))% k , per alcuni interi k (dove % è l'operatore modulo), la sequenza sarà necessariamente ciclico, perché ci sono solo k 2 valori diversi per (f k (n-1), f k (n-2)) . Tuttavia, questo ciclo di solito non comprende tutte le possibili coppie di valori, così seconda delle due valori iniziali f k (0) ed f k (1) , si potrebbe ottenere diversi cicli. Ad esempio, per k = 2, abbiamo le seguenti quattro possibilità, a seconda dei primi due valori:
0, 0, 0, 0, 0, 0, 0, 0, 0, ...
0, 1, 1, 0, 1, 1, 0, 1, 1, ...
1, 0, 1, 1, 0, 1, 1, 0, 1, ...
1, 1, 0, 1, 1, 0, 1, 1, 0, ...
A causa della natura ciclica delle sequenze, in realtà ci sono solo due sequenze sostanzialmente diverse qui, con orbite (0) e (0, 1, 1) . Diamo un'occhiata a k = 3 :
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, ...
0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, ...
1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, ...
1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, ...
1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, ...
2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, ...
2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, ...
2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, ...
Ancora una volta, ci sono solo due orbite diverse: (0) e (0, 1, 1, 2, 0, 2, 2, 1) .
Per k più alti potremmo avere più orbite, ma cadranno comunque in un numero relativamente piccolo di classi. Ad esempio k = 4 produce le quattro orbite (0) , (0,1,1,2,3,1) , (0, 2, 2) , (0, 3, 3, 2, 1, 3) e k = 5 le tre orbite (0) , (0, 1, 1, 2, 3, 0, 3, 3, 1, 4, 0, 4, 4, 3, 2, 0, 2, 2, 4, 1) e (1, 3, 4, 2) .
Il tuo compito in questa sfida è calcolare quante orbite genera la sequenza per un dato k . Questo è OEIS A015134 . Ecco i primi 100 valori (a partire da k = 1 ):
1, 2, 2, 4, 3, 4, 4, 8, 5, 6, 14, 10, 7, 8, 12, 16, 9, 16, 22, 16,
29, 28, 12, 30, 13, 14, 14, 22, 63, 24, 34, 32, 39, 34, 30, 58, 19,
86, 32, 52, 43, 58, 22, 78, 39, 46, 70, 102, 25, 26, 42, 40, 27, 52,
160, 74, 63, 126, 62, 70, 63, 134, 104, 64, 57, 78, 34, 132, 101, 60,
74, 222, 37, 38, 62, 328, 89, 64, 82, 124, 41, 86, 42, 172, 75, 44,
184, 178, 181, 132, 82, 180, 99, 140, 104, 246, 49, 50, 114, 76
Assicurati di controllare k = 11 , che è il primo input che produce più di k orbite.
Regole
Ti viene dato un numero intero positivo k e dovresti visualizzare A015134 (k) .
È possibile scrivere un programma o una funzione e utilizzare uno dei metodi standard per ricevere input e fornire output.
È possibile utilizzare qualsiasi linguaggio di programmazione , ma si noti che queste scappatoie sono vietate per impostazione predefinita.
Questo è code-golf , quindi la risposta valida più breve - misurata in byte - vince.