Vous êtes sur la page 1sur 4

ESCUELA POLITECNICA

NACIONAL
FACULTAD DE INGENIERIA EN
ELECTRICA Y ELCTRONICA
MATEMATICA DISCRETA
URQUIZA LUIS FELIPE
GRUPO 1

Jefferson Guala Fonseca


25/12/2018

Trabajo
1. Demostracion de algoritmo de Euclides extendido
La extencion del algoritmo de euclides es muy utilizada para determonar una exprecion con-
creta para el maximo comun divisor de cualquier enteros a y b.
Podemos definir a un entero d como una combinacion lineal de enteros a y b si y solo si existen
enteros s y t tales que as + bt = d.
Entonces para todos los enteros a y b diferentes de 0, si d = M CD(a, b), entonces existen enteros
s y t tales que as + bt = d.
Sean enteros a y b diferentes de 0 y dado d = M CD(a, b),sea
S = {x|x es un entero positivo y x = as + bt para algunos enteros s y t}.
Sabemos que S es un conjunto no vacio ya que (1) si a > 0 entonces 1.a + 0.b ∈ S,
(2) si a < 0 entonces (−1).a + 0.b ∈ S y (3) si a = 0 entonces por supocicion b 6= 0 y por tanto
0.a + 1.b ∈ S o 0.a + (−1).b ∈ S,Como S es un subconjunto no vacios de enteros positivos, entonces
hay un elemento minimo c en S.
Por definicion de S.
c = as + bt para algunos enteros s y t,
Entonces tendremos que demostrar que (1) c ≥ d y (2) c ≤ d entonces se concluye que c = d =
M CD(a, b).

(1) Demostracion de que c ≥ d:


Ya que d = M CD(a, b), por definicion de maximo comun divisor,d|a y d|b. Por tanto a = dxy
b = dy Para algunis enteros x y y, Entonces

c = as + bt; por definicion de S.


Sustituyendo a = dxy b = dy.
c = (dx)s + (dy)t.
c = d(xs + yt).

Pero xs + yt es un entero por que e suna suma de productos de enteros. Asi por definicion de
divisibilidad ,d|c. Tanto c como d son positivos y por tanto c ≥ d.

(2) Demostracion de que c ≤ d:


Aqui aplicamos en teorema del cociente residuo a la division de a por c para obtener:
a = cq + r para algunos enteros q y r con 0 ≤ r < c.
Asi para algunos enteros q y r con 0 ≤ r < c,
r = a − cq
Ahora c = as + bt. Por tanto,para algunis enteros q y r con 0 ≤ r < c,r = a − (as + bt)q
r = a(1 − sq) − btq.

Asi r es una combinacion lineal de a y b. Si r > 0, entonces r estaria en S y asi r seria un


elemento mas pequeño de S que c,que estaria en contradiccion con el echo de que c es el elemento
minimo de S.Por tanto r = 0.Sustituyendo en a = cq + r
a = cq, y por tanto c|a.
Ya que c|a y c|b, c es un comun divisor de a y b. Por tanto es menor o igual al maximo comun
divisor de a y b. Entonces c ≤ d.
De (1) y (2), concluimos que c = d. Se deduce que d,el maximo comun divisor de a y b, es igual a
as + bt.

2. Codigo en c

#i n c l u d e <s t d i o . h>
#include<s t d l i b . h>
long a , b , d , x , y ;

int main ( void ){


p r i n t f ( ” I n g r e s e l o s v a l o r e s de ay b\n” ) ;

while ( s c a n f ( ” %l d %l d ” ,&a ,&b )!=EOF){

E u c l i e x t e n ( a , b,&d,&x,&y ) ;
p r i n t f ( ”x= %l d y= %l d d= %l d \n” , x , y , d ) ;
}
return ( 0 ) ;

}
void E u c l i e x t e n ( long a , long b , long ∗d , long ∗x , long ∗y ){
long x1 , y1 ;
i f ( b==0){

∗d=a ; ∗ x =1;∗ y=0;


} else {
E u c l i e x t e n ( b , a %b , d , x , y ) ;
x1= ∗x ;
y1= ∗y ;
∗x= y1 ;
∗y=x1− ( a/b )∗ y1 ;

}
}
Primero debemos de declarar las variables que utilizaremos leemos y guardamos las entradas a
y b se creo una funcion llamada Eucliexten para poder devolver tres valores los cuales son x, y, z
hacemos un procedimiento en el que tres de los parámetros puedan ser modificadas (esto es,
pasamos las variables por referencia, en lugar de por valor. Esta funcion contiene el algoritmo
convencional de euclides, sólo que añadimos los valores iniciales de x y y, y en luego se incluye x,
y y d como parámetros. Entonces calculamos los nuevos valores de x y y, respaldando primero los
valores en x1 y y1.
La parte principal del programa lo encontramos en el instante en donde mandamos a llamar a la
funcion Eucliexten e imprimimos los resultados, todo esto mientras no lleguemos al fin de archivo.

3. Codigo en Python

def eucExt ( a , b ) :
r = [a,b]
s = [1 ,0]
t = [0 ,1]
i = 1
q = [[]]
while ( r [ i ] != 0 ) :
q = q + [ r [ i −1] // r [ i ] ]
r = r + [ r [ i −1] % r [ i ] ]
s = s + [ s [ i −1] − q [ i ] ∗ s [ i ] ]
t = t + [ t [ i −1] − q [ i ] ∗ t [ i ] ]
i = i +1
return ( r [ i −1] , s [ i −1] , t [ i −1])

try :
print ( ” Sean a , ab e n t e r o s \n” )
a = input ( ” I n g r e s a e l v a l o r de a : ” )
print ( ”\ t a =” , a )
b = input ( ” I n g r e s a e l v a l o r de b : ” )
print ( ”\ tb =” , b )
print ( ”\ t x= ” , eucExt ( int ( a ) , int ( b ) ) [ 1 ] )

print ( ”\ t y= ” , eucExt ( int ( a ) , int ( b ) ) [ 2 ] )


print ( ”\ t d =” , eucExt ( int ( a ) , int ( b ) ) [ 0 ] )
except V a l ueErro r :
print ( ”No e s un numero” )

Vous aimerez peut-être aussi