Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
pgcd_ppcm [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


pgcd_ppcm

Warning: Undefined array key -1 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1458

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
pgcd_ppcm [2009/11/23 16:57]
tyrtamos
pgcd_ppcm [2009/11/23 17:57]
tyrtamos
Ligne 91: Ligne 91:
 </code> </code>
  
-===== Calcul du PGCD de n nombres entiers =====+===== Calcul du PGCD de n (>=2) nombres entiers =====
  
 Une curiosité: calcul du PGCD d'un nombre quelconque d'entiers. Une curiosité: calcul du PGCD d'un nombre quelconque d'entiers.
Ligne 126: Ligne 126:
 En effet, 2*3=6 est bien le PGCD des 4 nombres a, b, c et d. En effet, 2*3=6 est bien le PGCD des 4 nombres a, b, c et d.
  
-En fait, on pourrait proposer cet autre code plus compact comme seule fonction pgcd() valable pour n'importe quel nombre de paramètres à partir de 2:+En fait, on peut proposer cet autre code plus compact et surtout autonome comme seule fonction pgcd() valable pour n'importe quel nombre de paramètres à partir de 2:
  
 <code python> <code python>
Ligne 159: Ligne 159:
  
  
-===== Calcul du PGCD étendu =====+===== Calcul du PGCD étendu avec les coefficients de Bézout et l'inversion modulaire =====
  
 Pour la théorie, voir ici: [[http://fr.wikipedia.org/wiki/Algorithme_d%27Euclide_%C3%A9tendu]] Pour la théorie, voir ici: [[http://fr.wikipedia.org/wiki/Algorithme_d%27Euclide_%C3%A9tendu]]
Ligne 233: Ligne 233:
 </code> </code>
  
-===== Calcul du PPCM =====+===== Calcul du PPCM de 2 nombres entiers =====
  
 PPCM = Plus Petit Commun Multiple PPCM = Plus Petit Commun Multiple
Ligne 289: Ligne 289:
 ppcm(0,42) => 0 ppcm(0,42) => 0
 ppcm(0,0) => 0  ppcm(0,0) => 0 
 +</code>
 +
 +===== Calcul du PPCM de n (>=2) nombre entiers =====
 +
 +On va faire comme pour le PGCD: ppcm(a, b, c) = ppcm(ppcm(a, b), c)
 +
 +Voilà un code autonome qui fera ça très bien, et qui s'appuie sur le pgcd d'Euclide:
 +
 +<code python>
 +def ppcm(*n):
 +    """Calcul du 'Plus Petit Commun Multiple' de n (>=2) valeurs entières (Euclide)"""
 +    def _pgcd(a,b):
 +        while b: a, b = b, a%b
 +        return a
 +    p = abs(n[0]*n[1])//_pgcd(n[0], n[1])
 +    for x in n[2:]:
 +        p = abs(p*x)//_pgcd(p, x)
 +    return p
 +</code>
 +
 +Application:
 +
 +<code python>
 +a = 2*5*7 # 70
 +b = 2*7*11 # 154
 +c = 2*3*5*7 # 210
 +d = 2*3*11 # 66
 +
 +print ppcm(a, b)
 +770
 +print ppcm(a, b, c)
 +2310
 +print ppcm(a, b, c, d)
 +2310
 </code> </code>
  
pgcd_ppcm.txt · Dernière modification: 2009/11/23 17:57 de tyrtamos