"""
"""
#! /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 )
"""
"""