- Function FPremier(D As Long) As String
- 'On vérifie les cas, 1 et 0, ainsi que les nombres négatifs. Si c'est le cas on stoppe la fontion.
- If D <= 1 Then FPremier = D: Exit Function
- Dim A, X, I, N, L As Long, B As String, M, O As Integer
- 'Préparation du premier passage de la boucle : cette boucle va vérifier si notre nombre est multiple de A ou X ; on lui met donc les valeurs des 2 exceptions : 2 et 3.
- A = 2
- X = 3
- N = 9
- O = 9
- 'Cette boucle sera effectuée 2 fois, une fois pour les cas 2 et 3, et une autre pour tous les facteurs de la forme 6t + 1
- For M = 0 To 1
- 'Tant que A est inférieur ou égal a la racine carrée de N
- While A <= Sqr(N)
- 'On vérifie que D est bien un multiple de D ou X (D et X sont les nombres premiers qui seront testés, soit 2 et 3 lors du premier passage, ensuite ils seront redéfinis a 5 et 7
- If D Mod A = 0 Or D Mod X = 0 Then
- 'On assigne le diviseur de D a la variable L
- L = IIf(D Mod A = 0, A, X)
- 'On calcule le nombre sous la forme D^I, ce qui évite d'avoir par exemple 8 = 2*2*2
- While D Mod L = 0
- I = I + 1
- D = D / L
- Wend
- 'On ajoute le résultat à la suite de la variable B (si I est plus grand que 1, alors le nombre est écrit sous la forme D^I
- B = B & Chr(32) & L & IIf(I > 1, Chr(94) & Trim(I), "")
- 'On réinitialise la variable I. Au premier passage, on met N égal 9 (racine de 3...). Au 2nd passage, il prendra la valeur de D.
- I = 0
- N = D * M + O
- Else
- 'Si le nombre n'est pas diviseur de A ou X, on ajoute 6 aux valeurs de A et X, ce qui stoppe la boucle au premier passage, et ce qui permet de la continuer au 2nd passage.
- A = A + 6
- X = X + 6
- End If
- Wend
- 'Le premier passage est terminé, on vérifiera désormais les valeurs 5 et 7, qui seront incrémentées de 6 a chaque fois, tous les nombres premiers sont donc vérifiés (11, 13, 17, 19, etc...)
- A = 5
- X = 7
- N = D
- O = 0
- Next M
- 'On retourne le résultat en remplaçant les espaces par des étoiles.
- FPremier = Replace(Trim(IIf(D > 1, B & Chr(32) & Trim(D), B)), Chr(32), Chr(42))
- End Function
Function FPremier(D As Long) As String
'On vérifie les cas, 1 et 0, ainsi que les nombres négatifs. Si c'est le cas on stoppe la fontion.
If D <= 1 Then FPremier = D: Exit Function
Dim A, X, I, N, L As Long, B As String, M, O As Integer
'Préparation du premier passage de la boucle : cette boucle va vérifier si notre nombre est multiple de A ou X ; on lui met donc les valeurs des 2 exceptions : 2 et 3.
A = 2
X = 3
N = 9
O = 9
'Cette boucle sera effectuée 2 fois, une fois pour les cas 2 et 3, et une autre pour tous les facteurs de la forme 6t + 1
For M = 0 To 1
'Tant que A est inférieur ou égal a la racine carrée de N
While A <= Sqr(N)
'On vérifie que D est bien un multiple de D ou X (D et X sont les nombres premiers qui seront testés, soit 2 et 3 lors du premier passage, ensuite ils seront redéfinis a 5 et 7
If D Mod A = 0 Or D Mod X = 0 Then
'On assigne le diviseur de D a la variable L
L = IIf(D Mod A = 0, A, X)
'On calcule le nombre sous la forme D^I, ce qui évite d'avoir par exemple 8 = 2*2*2
While D Mod L = 0
I = I + 1
D = D / L
Wend
'On ajoute le résultat à la suite de la variable B (si I est plus grand que 1, alors le nombre est écrit sous la forme D^I
B = B & Chr(32) & L & IIf(I > 1, Chr(94) & Trim(I), "")
'On réinitialise la variable I. Au premier passage, on met N égal 9 (racine de 3...). Au 2nd passage, il prendra la valeur de D.
I = 0
N = D * M + O
Else
'Si le nombre n'est pas diviseur de A ou X, on ajoute 6 aux valeurs de A et X, ce qui stoppe la boucle au premier passage, et ce qui permet de la continuer au 2nd passage.
A = A + 6
X = X + 6
End If
Wend
'Le premier passage est terminé, on vérifiera désormais les valeurs 5 et 7, qui seront incrémentées de 6 a chaque fois, tous les nombres premiers sont donc vérifiés (11, 13, 17, 19, etc...)
A = 5
X = 7
N = D
O = 0
Next M
'On retourne le résultat en remplaçant les espaces par des étoiles.
FPremier = Replace(Trim(IIf(D > 1, B & Chr(32) & Trim(D), B)), Chr(32), Chr(42))
End Function