Décomposition en facteurs premiers

Bonjour j'ai ecris le code suivant pour decomposer un entier en facteurs premiers ,il marche bien mais peut on faire plus court ou l'ameliorer ?

Option Base 1
Sub facteurs_premiers()
Dim i As Integer
Dim t As Variant
 ReDim t(1 To 100)
For i = 1 To 100
t(i) = i
Next
p = InputBox("saisir un entier à décomposer")
 For u = 1 To UBound(t)
  If premier(Val(t(u))) = True Then
   If p Mod Val(t(u)) = 0 And Val(t(u)) <> 1 Then
   j = 0
     Do
     j = j + 1
     Loop Until p Mod Val(t(u)) ^ j <> 0
       e = e & "*" & Val(t(u)) & "^" & j - 1
   End If
  End If
 Next
 MsgBox e 'retourne la décomposition en facteurs premiers
End Sub

avec sa fonction "premier" qui verifie qu'un nombre est premier :

Function premier(x As Integer) As Boolean

 For i = 2 To x - 1
  If x Mod i = 0 Then
   n = n + 1
  End If
 Next
 If n = 0 Then
 premier = True
 End If
End Function

merci pour vos commentaires

Bonjour rocket4,

Quelques modifications de syntaxe (à tester) :

Option Base 1
Sub facteurs_premiers()
Dim u As Integer, j As Integer, e As String, t(100) As Integer
p = Application.InputBox("saisir un entier à décomposer", type:=1)
For u = 1 To UBound(t)
  t(u) = u
  If premier(Val(t(u))) = True Then
   If p Mod Val(t(u)) = 0 And Val(t(u)) <> 1 Then
   j = 0
     Do
     j = j + 1
     Loop Until p Mod Val(t(u)) ^ j <> 0
       e = e & "*" & Val(t(u)) & "^" & j - 1
   End If
  End If
 Next
 MsgBox Mid(e, 2, Len(e)) 'retourne la décomposition en facteurs premiers
End Sub
Function premier(x As Integer) As Boolean

Dim i As Integer, n As Integer

 For i = 2 To x - 1
  If x Mod i = 0 Then n = n + 1
 Next
 If n = 0 Then premier = True
End Function

Merci Pedro22 c'est un poil mieux , bien vu pour la restitution de "e" encor merci

j'ai encor pu reduire le code en n'utilisant que les nombres premiers compris entre 1 et l'entier choisi au lieux de passer par une liste de nombres premiers allant de 1 à 100 .

Sub facteurs_premiers2()

Dim u As Integer, j As Integer, e As String, t(100) As Integer
p = Application.InputBox("saisir un entier à décomposer", Type:=1)
For u = 2 To p - 1
 If premier(u) = True Then
  z = z & " " & u
 End If
Next
s = Split(z, " ")
For u = 1 To UBound(s)
   If p Mod Val(s(u)) = 0 And Val(s(u)) <> 1 Then
     j = 0
     Do
     j = j + 1
     Loop Until p Mod Val(s(u)) ^ j <> 0
       e = e & "*" & Val(s(u)) & "^" & j - 1
   End If
Next
 MsgBox Mid(e, 2, Len(e)) 'retourne la décomposition en facteurs premiers
End Sub
Rechercher des sujets similaires à "decomposition facteurs premiers"