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