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