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 non nuls.

   Le cas c = 0 est trivial : x = -bk, y = ak,  k décrivant Z.

Dans ce programme :

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 d des entiers 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 - b'k , yo + a'k, avec a' = a/d, b' = b/d, 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 :"+"\n"+"xo = "+u*c+" , yo = "+ 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>

 

Un exemple d'exécution :   

2 × 18 - 3 × 9 = 9  : une solution est xo = 18, yo = 9

La solution générale est alors x = 18 + 3k, y = 9 + 2k.


© Serge Mehl - www.chronomath.com