viernes, 13 de septiembre de 2013

Codigo: Euclides en java

Ya que lo tengo hecho,comparto para aquel que quiera entender un  poco mas el algoritmo de euclides,ya que se usa para teoremas chinos y para encontrar maximo comun divisor,RSA y muchas otras cositas ;).



Por supuesto se supone que teneis todos los atributos creados,aunque podeis crearlos en el metodo,pero si lo vais a usar para mas cosas deberiais guardarlos en los atributos de la clase,y por supuesto r1=1,r2=0,u1=0,u2=1,para poder empezar a aplicar euclides

/**
* Metodo que saca los datos de aplicar euclides a un chino de solo 2 congruencias
* @param a a1,el de mayor modulo
* @param b a2
* @param r1    modulo mayor
* @param r2    modulo menor
*/
public Euclides(int a,int b,int r1,int r2){

//Captacion de las variables
this.r1 = r1;
this.r2 = r2;

//Preparacion entrada al bucle para que tenga los valores
r3 = r2;
r4 = r1%r2 ; //lo metemos para que no de error al entrar el while

while (r4 != 0){
//Ciclo comienza
r3 = r2;
r4 = r1%r2 ; // resto de a/b

//cociente de fila
q = r1/r2;

//bezu U

u3 = u2;
u4 = u1-(q*u3);

//bezu V

v3 = v2;
v4 = v1-(q*v3);

if (r4 != 0){
//refresco valores para usar en la siguiente fila de calculos
u1 = u3;
u2 = u4;

v1 = v3;
v2 = v4;

r1 = r3;
r2 = r4;

}//fin if

}//fin while = r4 = 0;

t1 = this.r2*v2;
t2 = this.r1*u2;

int x = a*t1+b*t2;
int lamda = this.r2*this.r1;

// Si r4= 0 los u2-3 y v2-3 que necesitamos son los que tienen los u,v de salida
String salida =  "El resultado de aplicar bezu a los nºs " + this.r1 + " y " + this.r2 +" es ; " +
"u = " + u2 + ",v = " + v2

+ "\n" +"Y \t r:"+r3+" \t r':"+r4

+ "\n" +"Y \t t1:"+t1+"\t t2:"+t2

+ "\n" +"Y \t x = "+ x +" \t lamda="+ lamda +"lamda"
+ "\n" +"Comprueba con lamda 0 en "+ a +"\t y " +b;

mensaje(salida);//aqui sacan el mensaje como quieran
}

No hay comentarios:

Publicar un comentario