ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges

Résolution de l'équation ax + by = c          programme JavaScript

On résout ici, en nombres entiers, une équation de la forme :

(e)         ax + by = c

a, b et c sont des entiers donnés. Selon la théorie, le PGCD de a et b doit diviser c, sinon il n'y a pas de solutions.

Avec cette petite restriction relative au coefficient a, une équation comme -3x + 7y = 5 devra être transformée en 3x - 7y = -5 puisque le programme accepte des coefficients b et c négatifs.

Le programme recherche le PGCD de a et b et donne une solution particulière (xo,yo), en résolvant l'identité de Bézout. Selon l'étude théorique (cliquez sur la clé en en-tête), la solution générale est alors :

xo - bk , yo + ak, k décrivant Z.



Le programme :

 

<SCRIPT LANGUAGE=JavaScript>
var a,b
function go()
{
a="" ; a=prompt("a = ",a)
if (a==null) {return}
a=eval(a)
if (a< 0) {alert("a doit être positif"+"\n"+"Recommencez...")}
b="" ; b=prompt("b = ",b)
if (b==null) {return}
b=eval(b)
sb=1;if(b< 0) {b=-b;sb=-1}
c="" ; c=prompt("c = ",c)
if (c==null) {return}
c=eval(c);
aa = a ; bb = b ; cc = c;
gcd=pgcd()
if (c % gcd != 0)
{alert("pgcd("+a+" , "+b+") = "+gcd+"\n"+ gcd+ " ne divise pas "+c+"\n"+" Pas de solutions")
}
else
{
a=aa/gcd ; b = bb/gcd ; c = cc/gcd ; n=0 ; rn = 0
while (rn != 1)
{
n++
an=n*a ; rn = an % b ; qn = (an-rn)/b
}
u=n ; v = -qn;
alert("pgcd("+aa+" , "+bb+") = "+gcd+"\n"+a+"*"+u+" + "+b+"*("+v+") = 1"+"\n"+
"Une solution est donc :"+"\n"+"x = "+u*c+" , y = "+ v*c*sb)
}
return
}

//------on utilise ci-dessous algorithme d'Euclide pour le pgcd

function pgcd()
{
while (b > 0)
{
r = a % b
a = b
b = r
}
return a
}</SCRIPT>

 


© Serge Mehl - www.chronomath.com