La séquence de Fibonacci est une séquence bien connue dans laquelle chaque entrée est la somme des deux précédentes et les deux premières entrées sont 1. Si nous prenons le modulo de chaque terme par une constante, la séquence deviendra périodique. Par exemple, si nous décidions de calculer la séquence mod 7, nous obtiendrions ce qui suit:
1 1 2 3 5 1 6 0 6 6 5 4 2 6 1 0 1 1 ...
Celui-ci a une période de 16. Une séquence apparentée, appelée la séquence de Pisano , est définie telle que a(n)
c'est la période de la séquence des fibonacci lorsqu'elle est calculée modulo n.
Tâche
Vous devrez écrire un programme ou une fonction qui, une fois donné n
, calculera et affichera la période du mod de séquence de Fibonacci n
. C'est le nième terme de la séquence de Pisano.
Vous ne devez prendre en charge que des entiers sur la plage 0 < n < 2^30
Il s'agit d'une compétition de golf de code , vous devez donc viser à minimiser la taille de votre code source telle que notée par octets.
Cas de test
1 -> 1
2 -> 3
3 -> 8
4 -> 6
5 -> 20
6 -> 24
7 -> 16
8 -> 12
9 -> 24
10 -> 60
11 -> 10
12 -> 24
f(i),f(i+1)
peut prendre au plus des n^2
valeurs mod n
. Ainsi, n
limité à 2^30
pourrait finir par produire une période allant jusqu'à 2^60
. Restreindre n <= 2^16
donnerait P(n) <= 2^32
.
f(i+2) = f(i+1)+f(i)
, ainsi l '«état» d'une machine en boucle sur la période peut être décrit avec une paire d'entiers mod n
. Il y a au plus des n^2
états, donc la période est au plus n^2
. Oh! Wikipedia prétend que la période est tout au plus 6n
. Peu importe ma trivialité.