a*y ≡ 1(mod n)
Es importante tener en cuenta que si «y» existe, entonces es único, y «a» es llamado invertible. Por notación, el inverso de «a» se denota por:
Propiedad:
Sea «a» E Zn , entonces «a» es invertible si y solamente si el mcd(a, n)= 1.
Algoritmo:
Entrada: a E Zn Salida : Existencia del inverso Hallar «x» e «y» tal que nx + ay = d; es decir usar: euclides_extendido(Zn,a) SI (d > 1) retornar (Inverso no existe) CASO CONTRARIO SI (y<0) retornar (y+n) CASO CONTRARIO retornar (y) FIN_SI FIN_SI
IMPLEMENTACIÓN:
Clase Euclides:
public class Euclides { public int x=0,y=0; public double getY() { return y; } public void setY(int y) { this.y = y; } public double getX() { return x; } public void setX(int x){ this.x = x; } public double euclidesExtendido(double a, double b){ int d=0,x=0,y=0; if(b==0) { d=(int) a; x=1; y=0; return d; } int x2 = 1, x1 = 0, y2 = 0, y1 = 1; double q=0, r=0; while(b>0) { q = (a/b); r = a%b; x = (int) (x2-q*x1); y = (int) (y2-q*y1); a = b; b = r; x2 = x1; x1 = x; y2 = y1; y1 = y; d=(int) a; } x = x2; y = y2; this.setY(y); this.setX(x); return d; } }Clase Inverso:
/** * * @author Andres Esquivel */ import javax.swing.JOptionPane; public class Inverso { public double CalcularInverso(long n,long z) { long mcd[] =new long[3]; int x=0,y = 0; Euclides obj = new Euclides(); if(n >z) { mcd=obj.euclidesExtendido(n,z); } if(n< z) { mcd=obj.euclidesExtendido(z,n); } System.out.println("MCD: "+mcd[0]); if(mcd[0] >1) { System.out.println("EL INVERSO NO EXISTE"); y=0; } else { y=(int) mcd[2]; if(y< 0) { y=(int) (y+z); } } //System.out.println("Hola y:" +y); return y; } }Clase Principal:
public class Principal { public static void main(String[] args) { Inverso obj = new Inverso(); double aux_resultado; //numero_a y numero_z son los datos que se ingresan por el usuario , donde numero_a es el numero que quiere hallar la inversa y numero_z representa a Z aux_resultado=obj.CalcularInverso(numero_a,numero_z); if(aux_resultado==0) { JOptionPane.showMessageDialog(null, "LA INVERSA NO EXISTE"); } else { System.out.println("EL INVERSO ES: "+aux_resultado); } } }Espero les sea de mucha utilidad ,saludos y hasta la próxima publicación.
Infinitamente agradezco tu post
ResponderEliminarno me esta resultando, marcas que mcd[2] debe tener algun valor pero no veo donde lo asignas
ResponderEliminar