Veuillez nous aider. J'ai travaillé sur ce non-stop et je ne peux pas le faire correctement. Le problème que j'ai est que la sortie que je reçois pour l'inverse est toujours 1.Reverse modulaire - codage java
C'est le code que j'ai (il calcule GCD et essaie de modifier ainsi il calcule aussi un^-1):
import java.util.Scanner;
public class scratchwork
{
public static void main (String[] args)
{
Scanner keyboard = new Scanner(System.in);
long n, a, on, oa;
long gcd = 0;
System.out.println("Please enter your dividend:");
n= keyboard.nextLong();
System.out.println("Please enter your divisor:");
a= keyboard.nextLong();
on= n;
oa= a;
while (a!= 0)
{gcd=a;
a= n% a;
n= gcd;
}
System.out.println("Results: GCD(" + odd + ", " + odr + ") = " + gcd);
long vX; vS; vT; vY; q; vR; vZ; m; b;
vX = n; vY=a;
vS = 0; vT = 1; m=0; b=0;
while (a != 0)
{
m=vT;;
b=vX;
q = n/a;
vR = vS - q*vT;
tZ = n - q*a;
vS = vT; n = da;
vT = tY; dY = vZ;
}
if (d>1) System.out.println("Inverse does not exist.");
else System.out.println("The inverse of "+oa+" mod "+on+" is "+vT);
}
}
Pour ceux qui, comme moi, n'ont pas entendu parler de l'inverse modulaire, voir: [Modular multiplicative inverse] (http://en.wikipedia.org/wiki/Modular_multiplicative_inverse) et [Extended Euclidean algorithm] (http: //en.wikipedia.org/wiki/Extended_Euclidean_algorithm) sur Wikipedia. – Justin
Vous devrez peut-être déboguer cela vous-même. Essayez d'imprimer les variables à chaque étape de la boucle et assurez-vous qu'elles correspondent à vos étapes de calcul manuel (vous avez essayé de le faire à la main, n'est-ce pas?). – Justin
J'ai fait le travail à la main plusieurs fois et ça marche. J'essaie de le mettre et je n'arrive pas à le faire fonctionner. – Andro08