Skip to content
Snippets Groups Projects
Select Git revision
  • 56b3be8926cf9c08c34772f4d3aa00bc9b8356c6
  • main default protected
  • 1-add-prime-functions
3 results

euclide.py

Blame
  • euclide.py 1015 B
    '''
    	Description : Calcule le PGCD de deux nombres et leurs
    	coefficients de bezout
    	Return : PGCD, Coef de X, Coef de Y 
    	(X est le nombre le plus grand)
    '''
    def pgcd_etendu(a, b):
    	a, b = abs(a), abs(b)
    	# On s'assure que le plus grand nombre est a
    	#if b > a:
    		#b,a = a,b
    
    	# Vérification que le plus petit nombre n'est pas 0
    	assert(not (b == 0))
    
    	r = [None] * 100
    	q = [None] * 100
    	x = [None] * 100
    	y = [None] * 100
    	etape = 2
    
    	# Phase d'initialisation
    	r[0] = a
    	x[0] = 1
    	y[0] = 0
    
    	r[1] = b
    	x[1] = 0
    	y[1] = 1
    
    	while (r[etape-1] != 0):
    		r[etape] = a % b
    		q[etape] = a // b
    		x[etape] = x[etape-2] - q[etape] * x[etape-1]
    		y[etape] = y[etape-2] - q[etape] * y[etape-1]
    
    		a, b = b, r[etape]
    		etape += 1
    
    	return r[etape-2], x[etape-2], y[etape-2]
    
    def pgcd_etendu_verif(a, b, x, y, pgcd):
    	if (pgcd == (a*x + b*y)):
    		return True
    
    	return False
    
    if __name__ == '__main__':
    
    	b = 4991
    	a = 1197
    
    	print(pgcd_etendu(a, b))
    	pgcd, x, y = pgcd_etendu(a, b)
    	print(pgcd_etendu_verif(a, b, x, y, pgcd))