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

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:

pierrejean

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

bonjour Levis

En attendant les vrais matheux du forum
Un essai
En page "premiers" la liste des 1000 premiers nombres premiers obtenus grace a une formule du génial MdF
En feuille2 deux fonctions personnalisées
Attention :Si le nombre dont on cherche la decomposition est premier la durée du calcul peut devenir très longue
d'autre part je ne connais pas trop le comportement de la fonction pour les cas limites
 

Pièces jointes

  • decompose.xlsm
    50.2 KB · Affichages: 530
  • decompose.xls
    219.5 KB · Affichages: 566
Dernière édition:

ROGER2327

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

Bonsoir à tous
Pour des nombres inférieurs à 1000, la formule matricielle suivante est suffisante.
Code:
[COLOR="DarkSlateGray"][B]=SOMME(1*(MOD($A2;B$1^LIGNE($A$1:$A$10))=0))[/B][/COLOR]
Si A2 contient un entier a non nul, et si B1 contient un entier premier p, la formule renvoie la valuation p-adique de a.​
ROGER2327
#3468


24 Floréal An CCXVIII
2010-W19-4T21:49:12Z
 

job75

XLDnaute Barbatruc
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+
 

Pièces jointes

  • Nombres premiers(1).zip
    19.4 KB · Affichages: 140

Levis

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

Bonsoir à tous
Pour des nombres inférieurs à 1000, la formule matricielle suivante est suffisante.
Code:
[COLOR="DarkSlateGray"][B]=SOMME(1*(MOD($A2;B$1^LIGNE($A$1:$A$10))=0))[/B][/COLOR]
Si A2 contient un entier a non nul, et si B1 contient un entier premier p, la formule renvoie la valuation p-adique de a.​


Merci c'est bien de ça dont j'ai besoin ! Par contre lorsque a n'est pas en A2 et p n'est pas en B1, ça met 1 si la valuation est supérieure à 1 et 0 si elle ne l'est pas.
Or, j'aurais besoin que ça me donne vraiment la valuation, ça doit venir d'un problème avec le terme "^LIGNE($A$1:$A$10)" et je ne le maitrise pas, quelqu'un pourrait-t-il m'indiquer quoi remplacer pour que ça marche ? Merci !
 

job75

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

Re Levis,

J'interviens en l'absence de ROGER2327.

1) LIGNE($A$1:$A$10) permet simplement de créer la matrice des nombres entiers de 1 à 10, on peut si l'on veut écrire à la place LIGNE($1:$10).

2) Si a n'est pas en A2 et p en B1, évidemment mettre à la place les références des cellules où se trouvent ces valeurs. C'est ce qu'on appelle adapter une formule ;)

3) La formule utilise la fonction SOMME et Roger a bien précisé qu'il s'agit d'une formule matricielle : donc il faut la valider par les touches Ctrl+Maj+Entrée.

Mais si l'on veut une formule "normale" (validation par la touche Entrée), il suffit de remplacer SOMME par la fonction SOMMEPROD.

Edit : salut pierrejean, tu m'as devancé :)

A+
 
Dernière édition:

ROGER2327

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

Re...
Merci c'est bien de ça dont j'ai besoin ! Par contre lorsque a n'est pas en A2 et p n'est pas en B1, ça met 1 si la valuation est supérieure à 1 et 0 si elle ne l'est pas.
Or, j'aurais besoin que ça me donne vraiment la valuation, ça doit venir d'un problème avec le terme "^LIGNE($A$1:$A$10)" et je ne le maitrise pas, quelqu'un pourrait-t-il m'indiquer quoi remplacer pour que ça marche ? Merci !
Ne remplacer pas "^LIGNE($A$1:$A$10)" par autre chose, mais validez la formule matricielle par Ctrl + Maj + Entrée.​
ROGER2327
#3473


25 Floréal An CCXVIII
2010-W19-5T01:28:09Z
 

ROGER2327

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

Bonjour pierrejean, job75
Du retard dans la transmission : je n'avais pas vu vos messages.
J'en profite pour compléter par une formule personnalisée :
Code:
[COLOR="DarkSlateGray"][B]Function vp(a&, p&)
Dim i&, q&
   If a Then
      q = p
      Do Until q * (a \ q) - a
         q = p * q
         i = i + 1
      Loop
      vp = i
   Else
      vp = ""
   End If
End Function[/B][/COLOR]
et une variante un poil plus rapide :
Code:
[COLOR="DarkSlateGray"][B]Function vp0(a&, p&)
Dim i&, q&
   If a Then
      If a \ p Then
         q = p
         Do Until q * (a \ q) - a
            q = p * q
            i = i + 1
         Loop
         vp0 = i
      End If
   Else
      vp0 = ""
   End If
End Function[/B][/COLOR]
ROGER2327
#3474


25 Floréal An CCXVIII
2010-W19-5T13:14:38Z
 

Levis

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

Ah ok j'avais pas fait Ctrl maj entrer
Ba un grand merci tout fonctionne !
2 dernières choses,
- j'ai de A1 à IJ1 par exemple une liste de nombres, comment faire pour les sommer en IK1 ?
- j'ai un nombre en A1, quelle fonction faut-il mettre en A2 pour que A2=1 si A1 est impaire et A2=0 si A1 est pair ?
Merci !
 

Discussions similaires