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