bonjour,
Citation :
pas vraiment utile Euclide pour la partie programmation
je ne suis pas d'accord
calcul de l'inverse avec Euclide étendu (en JavaScript (copier collé d'un de mes vieux scripts)
// calcul de l'inverse de a modulo m
function inv(a,m) {
var aa,bb,q,r, x2, x1, xx;
aa=a; bb=m;
x2=-1; x1=0;
while (bb!=0) {
q=Math.floor(aa/bb); r=aa%bb;
aa=bb; bb=r
xx = -q*x1 + x2;
x2= x1; x1=xx;
}
return (m-x2)%m;
}
largement pas optimisé du point de vue écriture, et fait n'importe quoi si PGCD(a,m) ≠ 1
(manque un test avant le return, et décider quoi renvoyer si ce test échoue car pas d'inverse)
"Euclide étendu" évite de remonter
ensuite pour obtenir les "coefficients de Bézout" alias solutions de ax + by = 1
tout se fait dans la même boucle avec des variables supplémentaires ici x2 et x1
en Python on peut largement condenser ça avec des "tuples".
notons aussi une variante qui dans la même boucle effectue cette "division euclidienne" sur des lignes de matrices
résolvant ainsi un système de n équations linéaires de Diophante à p inconnues
les restes chinois étant un cas particulier où n = p-1
par exemple 2 équations à 3 inconnues x et k, m :
x = a
0 +
k n
0
x = a
1 +
m n
1
cette méthode est un peu hors de propos ici, ça emmènerait trop loin.