La mathématique est l'art de donner le même nom à des choses différentes.
Poincaré
Avec corrigé
Rappels de cours :
- , pour
- Si , alors
Exemple : On souhaite calculer .
; On continue avec et .
; On continue avec et .
; On continue avec et .
; On continue avec et .
; Le reste est nul, le dernier diviseur est .
D'après l'algorithme d'Euclide, .
Vérifier que . Deux méthodes sont demandées : avec décomposition en facteurs premiers, ou sinon utiliser l'algorithme d'Euclide.
Faire un script qui définit une fonction PGCD(a, b).
Calculer .
Quelle remarque peut-on faire pendant le calcul ?
Une réponse
Plusieurs méthodes
Avec décomposition en facteurs premiers
Ainsi
Avec l'algorithme d'Euclide :
; On continue avec et .
; On continue avec et .
; On continue avec et .
; Le reste est nul, le dernier diviseur est .
Ainsi
Voir ci-dessous plusieurs variantes.
Les nombres choisis sont des termes consécutifs de la suite de Fibonacci, dans ce cas, les quotients sont toujours égaux à , et le est aussi égal à . C'est le pire des cas pour l'algorithme d'Euclide, il est plus rapide pour tous nombres inférieurs.
a, b = 6699, 5313 while b != 0: q, r = divmod(a, b) print(a, "/", b, "-> quotient :", q, ", reste :", r) a, b = b, r print("PGCD =", a)
6699 / 5313 -> quotient : 1 , reste : 1386
5313 / 1386 -> quotient : 3 , reste : 1155
1386 / 1155 -> quotient : 1 , reste : 231
1155 / 231 -> quotient : 5 , reste : 0
PGCD = 231
# variante minimaliste a, b = 6699, 5313 while b != 0: a, b = b, a%b print(a) # variante avec une fonction récursive def gcd(a: int, b: int) -> int: """Renvoie le PGCD de a et b. >>> gcd(15, 35) 5 >>> gcd(18, 77) 1 """ if b == 0: return abs(a) else: return gcd(b, a%b) # Variante avec une fonction non récursive def gcd(a: int, b: int) -> int: """Renvoie le PGCD de a et b. >>> gcd(15, 35) 5 >>> gcd(18, 77) 1 """ while b != 0: a, b = b, a%b return abs(a) # on profite ici de l'affectation simultanée ; possible en Python # variante fainéant from math import gcd gcd(6699, 5313) # attention `gcd` est dans le module `math` depuis Python3.6 # avant, `gcd` était dans le module `fractions`
Sachant que l'on a , déterminer avec le moins de calculs possibles les restes et quotients des divisions euclidiennes de par et par .
Une réponse
, donc , et ainsi :
divisé par donne un quotient de et un reste de .
, donc , et ainsi :
divisé par donne un quotient de et un reste de .
Une réponse
from math import gcd def ajoute_fractions(a, b, c, d): """Ajoute (détaille et simplifie) les fractions a/b et c/d""" assert b != 0 and d != 0, ("Dénominateur(s) nul(s) !", b, d) print(f"A = {a}/{b} + {c}/{d}") # peut-on simplifier les fractions dès le départ ? k1 = gcd(a, b); k2 = gcd(c, d) if k1>1 or k2>1: a //= k1; b //= k1 c //= k2; d //= k2 print(f"A = {a}/{b} + {c}/{d}") # on trouve alors le ppcm des dénominateurs k = gcd(b, d) if k == 1: # méthode brutale print("Les dénominateurs sont premiers entre eux.") print(f"A = ({a}*{d})/({b}*{d}) + ({c}*{b})/({d}*{b})") a, b, c, d = a*d, b*d, c*b, d*b else: # méthode élaborée print(f"{k} est un diviseur commun aux dénominateurs.") b //= k ; d //= k print(f"A = {a}/({b}*{k}) + {c}/({d}*{k})") print(f"A = ({a}*{d})/({b}*{k}*{d}) + ({c}*{b})/({d}*{k}*{b})") a, b, c, d = a*d, b*k*d, c*b, d*k*b assert b == d # nos dénominateurs sont bien égaux print(f"A = {a}/{b} + {c}/{b}") print(f"A = ({a}+{c})/{b}") a += c print(f"A = {a}/{b}") k = gcd(a, b) if k>1: print(f"On peut encore simplifier par {k}.") a //= k ; b //= k print(f"A = {a}/{b}") print("Le résultat est une fraction irréductible !") # TODO1 : faire uen version POO. # TODO2 : faire une version qui sort du code LaTeX !!! # exemples ajoute_fractions(1,2, 1,3) ajoute_fractions(1,20, -1,28)
A = 1/2 + 1/3
Les dénominateurs sont premiers entre eux.
A = (1*3)/(2*3) + (1*2)/(3*2)
A = 3/6 + 2/6
A = (3+2)/6
A = 5/6
Le résultat est une fraction irréductible !
A = 1/20 + -1/28
4 est un diviseur commun aux dénominateurs.
A = 1/(5*4) + -1/(7*4)
A = (1*7)/(5*4*7) + (-1*5)/(7*4*5)
A = 7/140 + -5/140
A = (7+-5)/140
A = 2/140
On peut encore simplifier par 2.
A = 1/70
Le résultat est une fraction irréductible !