Inspiré par cette question Math.SE .
Contexte
La séquence de Fibonacci (appelée F
) est la séquence, commençant de 0, 1
telle sorte que chaque nombre ( F(n)
) (après les deux premiers) est la somme des deux avant ( F(n) = F(n-1) + F(n-2)
).
Une séquence de Fibonacci mod K (appelée M
) est la séquence des nombres de Fibonacci mod K ( M(n) = F(n) % K
).
On peut montrer que la séquence de Fibonacci mod K est cyclique pour tout K, car chaque valeur est déterminée par la paire précédente, et il n'y a que K 2 paires possibles d'entiers non négatifs tous deux inférieurs à K. Parce que la séquence de Fibonacci mod K est cyclique après sa première paire de termes répétée, un nombre qui n'apparaît pas dans le mod K de la séquence de Fibonacci avant que la première paire de termes répétée n'apparaisse jamais.
Pour K = 4
0 1 1 2 3 1 0 1 ...
Pour K = 8
0 1 1 2 3 5 0 5 5 2 7 1 0 1 ...
Notez que pour K = 8, 4 et 6 n'apparaissent pas avant la répétition 0 1
, donc 4 et 6 n'apparaîtront jamais dans le mod 8 de la séquence de Fibonacci.
Défi
Étant donné un entier K strictement supérieur à 0, sortez tous les entiers non négatifs inférieurs à K qui n'apparaissent pas dans le mod K. de séquence de Fibonacci.
Règles
Vous pouvez supposer que K s'adaptera à votre type d'entier natif ( dans des limites raisonnables ).
S'il y a des nombres non négatifs inférieurs à K qui n'apparaissent pas dans le mod K de séquence de Fibonacci, votre programme / fonction devrait sortir tous ces nombres de manière raisonnable.
S'il n'y a pas d'entiers non négatifs inférieurs à K qui n'apparaissent pas dans le mod K de séquence de Fibonacci, votre programme / fonction peut l'indiquer en renvoyant une liste vide, en n'imprimant rien, en produisant une erreur, etc.
L'ordre n'a pas d'importance.
C'est le golf de code , donc la réponse la plus courte dans chaque langue l'emporte.
Cas de test
Générez des cas de test en ligne!
Cas de test non vides
8 [4, 6]
11 [4, 6, 7, 9]
12 [6]
13 [4, 6, 7, 9]
16 [4, 6, 10, 12, 14]
17 [6, 7, 10, 11]
18 [4, 6, 7, 9, 11, 12, 14]
19 [4, 6, 7, 9, 10, 12, 14]
21 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 19]
22 [4, 6, 7, 9, 15, 17, 18, 20]
23 [4, 7, 16, 19]
24 [4, 6, 9, 11, 12, 14, 15, 18, 19, 20, 22]
26 [4, 6, 7, 9, 17, 19, 20, 22]
28 [10, 12, 14, 16, 18, 19, 23]
29 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27]
31 [4, 6, 9, 12, 14, 15, 17, 18, 19, 22, 25, 29]
32 [4, 6, 10, 12, 14, 18, 20, 22, 26, 28, 30]
33 [4, 6, 7, 9, 15, 17, 18, 20, 24, 26, 27, 28, 29, 31]
34 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30]
36 [4, 6, 7, 9, 10, 11, 12, 14, 16, 18, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32]
37 [9, 10, 14, 17, 20, 23, 27, 28]
38 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 36]
39 [4, 6, 7, 9, 15, 17, 19, 20, 22, 24, 30, 32, 33, 35]
...
200 [4, 6, 12, 14, 20, 22, 28, 30, 36, 38, 44, 46, 52, 54, 60, 62, 68, 70, 76, 78, 84, 86, 92, 94, 100, 102, 108, 110, 116, 118, 124, 126, 132, 134, 140, 142, 148, 150, 156, 158, 164, 166, 172, 174, 180, 182, 188, 190, 196, 198]
...
300 [6, 18, 30, 42, 54, 66, 78, 90, 102, 114, 126, 138, 150, 162, 174, 186, 198, 210, 222, 234, 246, 258, 270, 282, 294]
...
400 [4, 6, 10, 12, 14, 20, 22, 26, 28, 30, 36, 38, 42, 44, 46, 52, 54, 58, 60, 62, 68, 70, 74, 76, 78, 84, 86, 90, 92, 94, 100, 102, 106, 108, 110, 116, 118, 122, 124, 126, 132, 134, 138, 140, 142, 148, 150, 154, 156, 158, 164, 166, 170, 172, 174, 180, 182, 186, 188, 190, 196, 198, 202, 204, 206, 212, 214, 218, 220, 222, 228, 230, 234, 236, 238, 244, 246, 250, 252, 254, 260, 262, 266, 268, 270, 276, 278, 282, 284, 286, 292, 294, 298, 300, 302, 308, 310, 314, 316, 318, 324, 326, 330, 332, 334, 340, 342, 346, 348, 350, 356, 358, 362, 364, 366, 372, 374, 378, 380, 382, 388, 390, 394, 396, 398]
...
Cas de test vides (aucune sortie, erreur, liste vide, etc. est une sortie acceptable)
1, 2, 3, 4, 5, 6, 7, 9, 10, 14, 15, 20, 25, 27, 30, 35 ... 100 ...
Réponses:
Gelée ,
98 octetsEssayez-le en ligne!
Sur la base de la période de Pisano
p(n) <= 6n
de A001175 . Aussip(n) <= 6n <= n^2
pourn >= 6
etp(n) <= n^2
pourn < 6
. Enregistré cet octet grâce à Dennis.la source
²
devrait fonctionner au lieu de×6
.Haskell , 70 octets
Un certain nombre d'octets économisés grâce à Esolanging Fruit
8 octets économisés grâce à Laikoni
Essayez-le en ligne!
la source
read$show
fonctionne au lieu defromInteger
dans ce cas et enregistre deux octets.zip[1..x^2]
de la troncature permet d'économiser encore plus d'octets: essayez-le en ligne!Perl 6 ,
43 42 3932 octetsEssaye-le
Essaye-le
Essaye-le
Essaye-le
Étendu:
la source
> <> , 48 octets
Essayez-le en ligne!
Prend l'entrée via le drapeau -v.
Imprime beaucoup de nouvelles lignes en excès, mais fait le travail. Cela utilise essentiellement la première ligne pour stocker l'ensemble des nombres qui sont apparus jusqu'à présent dans la séquence.
Comment ça fonctionne:
la source
Python 2 , 69 octets
Essayez-le en ligne!
la source
MATL ,
1918 octetsEssayez-le en ligne!
-1 octet merci à Guiseppe.
la source
X~
!Python 3 , 91 octets
Essayez-le en ligne!
la source
Husk ,
13 1210 octetsMerci @Zgarb pour -2 octets!
Imprime une liste vide au cas où tous les entiers apparaissent, essayez-le en ligne!
Explication
la source
U2
pour obtenir le préfixe le plus long où aucune paire adjacente ne se répète.Python 3 , 78 octets
Essayez-le en ligne!
Imprime un ensemble, donc la sortie pour les cas de test vides est
set()
, qui est l'ensemble vide.la source
R,
9286 octetsMerci à @Giuseppe d' avoir économisé 6 octets!
Essayez-le en ligne!
Implémentation assez simple ( version précédente , mais même concept):
la source
setdiff
, bonne idée!1:k^2
approche que tout le monde utilisePython 3,
173152 152143131 octetsUn merci spécial à @ovs.
Essayez-le en ligne
Comment ça marche?
La première fonction prend deux paramètres m et n, et elle retourne le nième nombre de Fibonacci mod m. La deuxième fonction parcourt les nombres de Fibonacci mod k et vérifie si 0 et 1 sont répétés. Il stocke les nombres dans une liste et le compare avec une liste contenant les nombres 1-n. Les numéros en double sont supprimés et les numéros restants sont retournés.
la source
set()
et des comparaisons chaînées.05AB1E , 10 octets
Essayez-le en ligne!
-3 octets grâce à Emigna.
la source
Rubis , 47 octets
Essayez-le en ligne!
Bien qu'il utilise une partie de la même logique, ce n'est pas basé sur la réponse de GB .
Explication:
la source
Lisp commun, 106 octets
Essayez-le en ligne!
la source
Pari / GP , 55 octets
Essayez-le en ligne!
la source
Elixir ,
148144 octetsEssayez-le en ligne!
Pas une réponse particulièrement compétitive, mais c'était vraiment amusant de jouer au golf! Elixir est un langage assez lisible, mais une explication du désordre des personnages au milieu suit.
Cette explication est en deux sections, le mod-fibonacci et son fonctionnement
Mod-fib:
Cela renvoie un flux infini de fibonacci mod
x
. Il commence par un accumulateur{1,1}
et applique l'opération à l'infini: accumulateur donné{p,n}
, sortiep mod x
vers le flux. Réglez ensuite l'accumulateur sur{n,p+n}
.Le reste:
la source
SNOBOL4 (CSNOBOL4) , 153 octets
Essayez-le en ligne!
la source
Rubis ,
5553 octetsEssayez-le en ligne!
la source
JavaScript (ES6), 84 octets
la source
Python 3, 76 octets
Cela regarde simplement le plus long cycle possible de nombres de Fibonnaci (n ^ 2), et crée une liste de tous les nombres qui se produisent pendant cette période. Pour simplifier la logique, les nombres sont stockés modulo n.
la source