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