Je fais la question 12 du projet euler où je dois trouver le premier numéro de triangle avec 501 diviseurs. Donc j'ai fouetté cela avec Haskell:Fonction Haskell prenant beaucoup de temps à traiter
divS n = [ x | x <- [1..(n)], n `rem` x == 0 ]
tri n = (n* (n+1)) `div` 2
divL n = length (divS (tri n))
answer = [ x | x <- [100..] , 501 == (divL x)]
La première fonction trouve les diviseurs d'un nombre.
La deuxième fonction calcule le nombre n-ième triangle
La troisième fonction trouve la longueur de la liste qui sont des diviseurs du nombre de triangle
La quatrième fonction doit renvoyer la valeur du numéro de triangle qui a 501 diviseurs.
Mais jusqu'à présent, cela fonctionne pendant un certain temps sans retourner un résultat. La réponse est-elle très grande ou ai-je besoin d'une sérieuse optimisation pour que cela fonctionne dans un délai réaliste?
En général, c'est une bonne heuristique dans ce genre de tâches, de regarder les facteurs premiers des nombres que vous obtenez - 501 = 3 * 167 –