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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager