"""
""" #! /usr/bin/python3 # -*- coding: utf-8 -*- # calcul des coefficients de Bezout : PGCD(a, b) = a u + b v # # principe : les diviseurs communs à a et b # divisent aussi le reste : r = a - b q # on remplace a par r # et on recommence : diviseurs communs à b et r . . . # voir aussi : pgcd.py import sys import math def pgcd(a, b): # calcul des coefficients de Bezout : PGCD = u a + v b if type(a) != int : print("erreur type a") sys.exit(1) a0 = a b0 = b # a = b q0+ r0 # r0 = a * 1 + b * (-q0) = a u0 + b v0 # b = r0 q1+ r1 # r1 = b - r0 q1 = a u1 + b v1 # avec u1 = (-q1) u0 ; et v1 = (-q1) v0 + 1 # quand rn = 0 donc pgcd = r(n-1) (u0, v0) = (1, 0) # a = u0 a + v0 b (u1, v1) = (0, 1) # b = u1 a + v1 b r = b while r != 0 : # division euclidienne : a = b q + r r = a % b # reste de la division a / b ; aussi a modulo b # r est divisible par le PGCD(a, b) # division euclidienne : q = partie entière du quotient q = a // b print(r, q) # on met r sous la forme : r = u a + v b # r = a - b q = u0 a + v0 b - q (u1 a + v1 b) # r = (u0 - q u1) a + (v0 - q v1) b (u2, v2) = (u0 - q * u1, v0 - q * v1) # bascule pour l'itération suivante : a = b (u0, v0) = (u1, v1) b = r (u1, v1) = (u2, v2) # print(a, (u0, v0), (u1, v1)) # print(a0 * u0 + b0 * v0) # print(a0 * u1 + b0 * v1) return a, (u0, v0) # nombres premiers entre eux (exemple : nombres de Fibonacci) a = 144 b = 89 (x, (u, v)) = pgcd (a, b) print("pgcd =", x) print("Bezout :", a, "*(", u, ") +", b, "*(", v, ") =", a * u + b * v ) a = 2*3*5*7*17 b = 2*3*11*13*19 (x, (u, v)) = pgcd (a, b) print("pgcd =", x) print("Bezout :", a, "*(", u, ") +", b, "*(", v, ") =", a * u + b * v ) """"""