MATHS & EXCEL : Décomposition d'un nombre ?

  • Initiateur de la discussion Initiateur de la discussion Levis
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Levis

XLDnaute Nouveau
Bonjour,
Y a-t-il une fonction sur excel pour décomposer un nombre en facteur de nombres premiers ?
Et surtout, comment donner la valuation p-adique d'un nombre ?
(Quand p est un nombre premier, par exemple p=3, la valuation 3-adique d'un nombre est son exposant pour 3 dans sa décomposition, par exemple la valuation 3-adique de 1134 est 4 car 1134=2*7*3^4)
Quelqu'un de fort en programmation excel pourrait-il me dire comment faire ?
Merci !
 
Dernière édition:
Re : MATHS & EXCEL : Décomposition d'un nombre ?

Re...
Mon problème est que je ne sais toujours pas quel est votre problème.

Message #3 :
Je n'en ai pas besoin pour d'énorme nombre, j'en ai besoin pour des nombres inférieurs à 1000.

Message #30 :
(...) Par exemple pour la ligne correspondant à 1456, j'ai sur chaque colonne la valuation p-adique où p (premier) (...)

Par ailleurs, il s'agissait au début de trouver la valuation p-adique d'un entier, maintenant il s'agit de sommer les valuations p-adiques du dit entier pour plusieurs valeurs différentes de p.

Quel est, finalement, le but de la manœuvre ?​
ROGER2327
#3480


26 Floréal An CCXVIII
2010-W19-6T15:18:20Z
 
Re : MATHS & EXCEL : Décomposition d'un nombre ?

Re Levis,

Faire la somme des p-adiques, je ne vois pas par formule.

Par contre en VBA, voyez le fichier joint avec la fonction S qui fait ce travail.

Pour cette fonction, j'ai juste complété le code de la fonction D.

A+
 

Pièces jointes

Re : MATHS & EXCEL : Décomposition d'un nombre ?

Bonjour à tous
Voici une fonction personnalisée pour calculer la somme des valuations p-adiques d'un entier positif (entier maximum : 2 147 483 647, qui est le plus grand entier long au sens de VisualBasic).
Code:
[COLOR="DarkSlateGray"][B]      CODE SUPPRIMÉ  -  voir #33 [/B][/COLOR]

J'ai ajouté au classeur joint au message #33 des fonctions construites sur le même modèle pour le calcul du nombre des diviseurs et la factorisation première des dits "entiers longs".
ROGER2327
#3481


26 Floréal An CCXVIII
2010-W19-6T16:30:15Z


____________________
À job75 : je viens de voir votre dernier message : je regarderez son contenu un peu plus tard.
 
Dernière édition:
Re : MATHS & EXCEL : Décomposition d'un nombre ?

Bonsoir le fil 🙂,
Une petite proposition dont je n'ai pas calculé les limites, ni le temps d'exécution, mais qui me semble dans des limites de temps de calcul acceptables :
Code:
Function Décompose(Nbre As Double) As String
Dim Tableau(), I As Double, J As Integer
If Int(Nbre) <> Nbre Or Nbre <= 0 Then
Décompose = "Erreur !"
Exit Function
End If
If Nbre = 1 Then Décompose = "1": Exit Function
If Nbre = 2 Then Décompose = "2": Exit Function
J = 0
Refait:
ReDim Preserve Tableau(J)
If Nbre Mod 2 = 0 Then
Tableau(J) = 2
Nbre = Nbre / 2
ReDim Preserve Tableau(UBound(Tableau) + 1)
J = J + 1
GoTo Refait
End If
I = 3
Do
If Nbre Mod I = 0 Then
Tableau(J) = I
Nbre = Nbre / I
ReDim Preserve Tableau(UBound(Tableau) + 1)
J = J + 1
Else
I = I + 2
End If
Loop While Int(Sqr(Nbre)) >= I
Décompose = Tableau(0)
For I = LBound(Tableau) + 1 To UBound(Tableau) - 1
Décompose = Décompose & "x" & Tableau(I)
Next I
If UBound(Tableau) > 1 Then
Décompose = Décompose & "x" & Nbre
Else
Décompose = Nbre
End If
End Function
et
Code:
Function SommeAdique(Adique As String) As Integer
Dim Tableau
Tableau = Split(Adique, "x")
SommeAdique = UBound(Tableau) + 1
End Function
pour la somme des adiques.
Bonne soirée 😎
 
Re : MATHS & EXCEL : Décomposition d'un nombre ?

Suite...
Le code proposé dans le message #33 comporte une erreur qui, dans quelques cas, induit une erreur par dépassement de capacité. Voici le code rectifié et le classeur corrigé... Avec mes excuses.
Code:
[COLOR="DarkSlateGray"][B]Function SVal(v&)
Dim f, i&, j&, k&, n&, m&
[COLOR="SeaGreen"]'   Application.Volatile[/COLOR]
   If v Then
      f = Array(2, 3, 5, 7, 11)
      For i = 0 To 4
         k = f(i)
         m = 0
         Do Until k * (v \ k) - v
            v = v \ k
            m = m + 1
         Loop
         If m Then SVal = SVal + m
      Next
      f = Array(12, 4, 2, 4, 6, 2, 6, 4, 2, 4, 6, 6, 2, 6, 4, 2, 6, 4, 6, 8, 4, 2, 4, 2, 4, 14, 4, 6, 2, 10, 2, 6, _
         6, 4, 2, 4, 6, 2, 10, 2, 4, 2, 12, 10, 2, 4, 2, 4, 6, 2, 6, 4, 6, 6, 6, 2, 6, 4, 2, 6, 4, 6, 8, 4, 2, 4, _
         6, 8, 6, 10, 2, 4, 6, 2, 6, 6, 4, 2, 4, 6, 2, 6, 4, 2, 6, 10, 2, 10, 2, 4, 2, 4, 6, 8, 4, 2, 4, 12, 2, 6, _
         4, 2, 6, 4, 6, 12, 2, 4, 2, 4, 8, 6, 4, 6, 2, 4, 6, 2, 6, 10, 2, 4, 6, 2, 6, 4, 2, 4, 2, 10, 2, 10, 2, 4, _
         6, 6, 2, 6, 6, 4, 6, 6, 2, 6, 4, 2, 6, 4, 6, 8, 4, 2, 6, 4, 8, 6, 4, 6, 2, 4, 6, 8, 6, 4, 2, 10, 2, 6, 4, _
         2, 4, 2, 10, 2, 10, 2, 4, 2, 4, 8, 6, 4, 2, 4, 6, 6, 2, 6, 4, 8, 4, 6, 8, 4, 2, 4, 2, 4, 8, 6, 4, 6, 6, 6, _
         2, 6, 6, 4, 2, 4, 6, 2, 6, 4, 2, 4, 2, 10, 2, 10, 2, 6, 4, 6, 2, 6, 4, 2, 4, 6, 6, 8, 4, 2, 6, 10, 8, 4, 2, _
         4, 2, 4, 8, 10, 6, 2, 4, 8, 6, 6, 4, 2, 4, 6, 2, 6, 4, 6, 2, 10, 2, 10, 2, 4, 2, 4, 6, 2, 6, 4, 2, 4, 6, 6, _
         2, 6, 6, 6, 4, 6, 8, 4, 2, 4, 2, 4, 8, 6, 4, 8, 4, 6, 2, 6, 6, 4, 2, 4, 6, 8, 4, 2, 4, 2, 10, 2, 10, 2, 4, _
         2, 4, 6, 2, 10, 2, 4, 6, 8, 6, 4, 2, 6, 4, 6, 8, 4, 6, 2, 4, 8, 6, 4, 6, 2, 4, 6, 2, 6, 6, 4, 6, 6, 2, 6, _
         6, 4, 2, 10, 2, 10, 2, 4, 2, 4, 6, 2, 6, 4, 2, 10, 6, 2, 6, 4, 2, 6, 4, 6, 8, 4, 2, 4, 2, 12, 6, 4, 6, 2, _
         4, 6, 2, 12, 4, 2, 4, 8, 6, 4, 2, 4, 2, 10, 2, 10, 6, 2, 4, 6, 2, 6, 4, 2, 4, 6, 6, 2, 6, 4, 2, 10, 6, 8, _
         6, 4, 2, 4, 8, 6, 4, 6, 2, 4, 6, 2, 6, 6, 6, 4, 6, 2, 6, 4, 2, 4, 2, 10, 12, 2, 4, 2, 10, 2, 6, 4, 2, 4, _
         6, 6, 2, 10, 2, 6, 4, 14, 4, 2, 4, 2, 4, 8, 6, 4, 6, 2, 4, 6, 2, 6, 6, 4, 2, 4, 6, 2, 6, 4, 2, 4, 12, 2)
      k = 1
      For j = 0 To Int(Sqr(v) - 11) \ 2310
         For i = 0 To 479
            k = k + f(i)
            m = 0
            Do Until k * (v \ k) - v
               v = v \ k
               m = m + 1
            Loop
            If m Then
               SVal = SVal + m
               If v = 1 Then Exit Function
            End If
         Next
      Next
      If v > 1 Then SVal = SVal + 1
   Else
      SVal = ""
   End If
End Function[/B][/COLOR]
ROGER2327
#3482


26 Floréal An CCXVIII
2010-W19-6T20:15:10Z
 

Pièces jointes

Dernière édition:
Re : MATHS & EXCEL : Décomposition d'un nombre ?

Bonjour Levis, salut pierrejean, Staple, Roger,

Voici une autre fonction qui détermine d'abord les nombres premiers et les stocke dans une collection :

Code:
Function D(N As Double) As String 'décompose N en nombres premiers
Dim maxi As Long, liste As New Collection, i As Long, j As Long
maxi = 10000 'modifiable
If N = 0 Or Int(N) <> N Or N > maxi Then Exit Function
'---Liste des nombres premiers---
liste.Add 2
For i = 3 To N Step 2
  For j = 2 To liste.Count
    If liste(j) > Evaluate("SQRT(" & i & ")") Then Exit For
    If i Mod liste(j) = 0 Then GoTo 1
  Next
  liste.Add i
1 Next
'---Calcul de D---
For i = 1 To liste.Count
  If N Mod liste(i) = 0 Then
    j = 1
2   j = j + 1
    If N Mod liste(i) ^ j = 0 Then GoTo 2
    D = D & IIf(D = "", "", "*") & liste(i) & IIf(j = 2, "", "^" & j - 1)
    If Evaluate(D) = N Then Exit For
  End If
Next
If D = "" Then D = N
End Function


Elle est paramétrée pour un maximum de 10000, qu'on peut modifier.

Fichier joint.

A+

Bonjour,

Je déterrre un vieux sujet.

Le calcul prend beaucoup de temps pour de grands nombres.

Est-il possible de précharger la "collection" de nombres premiers plutôt que de la constituer au fil des différents calculs (si c'est bien comme cela que la macro fonctionne?).

Merci d'avance.
 
Re,

Le résultat de la fonction peut aussi être #N/A.

Ceci se produit parce que la liste des nombres premiers est trop petite. La décomposition comprend un nombre premier qui n'est pas dans la liste des 10 000 nombres premiers.

Pour pouvoir aller jusqu'au maximum du type entier long, il faudrait la liste des nombres premiers jusqu'au maximum du type entier long.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
250
Affichages
16 K
Réponses
1
Affichages
431
Retour