Decomposition facteurs premiers

Contenu du snippet

"Un nombre premier est un entier naturel non-nul n'ayant que deux diviseurs : 1 et lui-même."
Cette fonction vous permettra de décomposer un nombre en un produit de facteurs premiers. Exemples :
FPremier(8) retourne 2^3
FPremier(35) retourne 5*7
FPremier(12) retourne 2^2*3
FPremier(7) retourne 7 (puisque 7 est un nombre premier)
FPremier(0) et FPremier(1) ainsi que tous les nombres négatifs retournent "Error"

Source / Exemple :


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

Conclusion :


Ce code est mon premier en Visual Basic, donc n'hésitez pas pour les conseils d'optimisation ;)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.