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 essais )2520 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