Bonjour,
Déjà je viens à peine de découvrir F# (et les langages fonctionnels par la même occasion), donc j'y vais lentement, j'essaie de bien tout comprendre (c'est pas gagné) et pour cela je me sers du Project Euler pour me faire la main.
En fait j'ai un souci concernant ce problème là:
j'ai tout d'abord écrit ce code là (après maints essais2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?)
Qui m'a affiché comme résultat 18 044 195 qui ne se trouve pas être la bonne réponse.
Code F# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 let Euler005 = let rec pgcd x y = if y = 0 then x else pgcd y ( x % y ) let ppcm x y = x * y / ( pgcd x y ) { 1 .. 20 } |> Seq.fold ppcm 1
Après m'être relu, avoir griffonné sur papier, et ne pas m'être rendu compte d'une erreur flagrante, j'ai bidouillé ça un peu dans tout les sens pour arriver à force de changements (et d'annulation de changements) à ceci
Notez que la seule différence est le typage passé de int à int64 et là je lance et pof 232 792 560 le bon résultat
Code F# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 let Euler005 = let rec pgcd x y = if y = 0L then x else pgcd y ( x % y ) let ppcm x y = x * y / ( pgcd x y ) { 1L .. 20L } |> Seq.fold ppcm 1L
Alors je fais un bon :yeah: mais au final je pige pas pourquoi ça donne le bon résultat avec des int64 et pas avec des int vu que je suis à peine à 10% de la valeur maximale pour un int
Donc si quelqu'un peut m'éclairer là dessus (ou sur mon algo, un conseil est toujours bon à prendre) je le remercie d'avance.
Cordialement !
Partager