Décomposition en facteurs premiers Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
r
rocket4
Membre impliqué
Membre impliqué
Messages : 1'168
Appréciations reçues : 2
Inscrit le : 30 août 2011
Version d'Excel : 2010

Message par rocket4 » 7 novembre 2018, 14:56

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
Avatar du membre
Pedro22
Passionné d'Excel
Passionné d'Excel
Messages : 3'012
Appréciations reçues : 300
Inscrit le : 26 janvier 2017
Version d'Excel : 2010 FR
Version de Sheets : FR
Téléchargements : Mes applications

Message par Pedro22 » 7 novembre 2018, 15:45

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 de prendre 30 sec pour lire la charte du forum.
Quelques conseils : ici
r
rocket4
Membre impliqué
Membre impliqué
Messages : 1'168
Appréciations reçues : 2
Inscrit le : 30 août 2011
Version d'Excel : 2010

Message par rocket4 » 7 novembre 2018, 16:09

Merci Pedro22 c'est un poil mieux , bien vu pour la restitution de "e" encor merci :)
r
rocket4
Membre impliqué
Membre impliqué
Messages : 1'168
Appréciations reçues : 2
Inscrit le : 30 août 2011
Version d'Excel : 2010

Message par rocket4 » 7 novembre 2018, 16:18

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
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message