Optimiser macro : problème d'Euler n°12
Bonjour,
J'essaye tant bien que mal de résoudre le problème d'Euler n°12 (https://projecteuler.net/problem=12)
Mon problème, c'est que ma macro est trop gourmande en calcul et du coup, vraiment longue à s'exécuter.
A chaque lancement de la macro, Excel tombe en mode "ne répond pas" et j'ai pas eu la patience d'attendre plus de 4min après le lancement de la macro. Avec un Ctrl+Pause aux environs de 4min, j'en suis au nombre triangulaire 7 279 020 qui admettrais (au moins) 142 diviseurs.
Mon programme semble fonctionner pour de petits nombres, donc ma question n'est pas de trouver une réponse au problème n°12, mais plutôt de m'aider à réduire le temps d'exécution de ma macro.
mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| Sub prob12()
Dim a As Long
Dim nb_diviseur As Long
Dim diviseur As Long
Dim nb_triangle As Long
a = 3
nb_triangle = 3
For a = 3 To 20000000
diviseur = 1
nb_diviseur = 0
Do While nb_diviseur < 500
If nb_triangle Mod diviseur = 0 Then
diviseur = diviseur + 1
nb_diviseur = nb_diviseur + 1
Else
If diviseur > nb_triangle / 2 Then
nb_diviseur = nb_diviseur + 1
Exit Do
Else
diviseur = diviseur + 1
End If
End If
Loop
If nb_diviseur >= 500 Then
MsgBox nb_triangle & " est le premier nombre triangulaire admettant plus de 500 diviseurs"
End
End If
nb_triangle = nb_triangle + a
Next
End Sub |
Merci d'avance pour vos conseils
Mayeux67