Vous êtes sur la page 1sur 7

L-PILOTE BOURGUIBA DE TUNIS PROF :BEN JEDIDIA CHOKRI

PROCEDURE DE RECHERCHE
D’UNE SOLUTION PARTICULUERE DE L’EQUATION DIOPHANTIENNE

Théorème :
Soient a et b deux entiers naturels non nuls et δ = a ∧ b.
Il existe un couple (u,v) ∈ Z x Z tel que :
δ = rn = (β n a − α n b )(
. − 1)n +1
δ = au + bv avec 
u = β n .(− 1)n +1 ; v = α n .(−1) n

rn : étant le dernier reste non nul dans l’algorithme d’Euclide.


Démonstration :
Si b divise a alors δ=b=ax0+bx1 et par suite (u,v)=(0,1)
Si b ne divise pas a. On considère les divisions successives permettant
de déterminer le pgcd de a et b (Algorithme d’Euclide).
Démontrons par récurrence :
∀i ∈ {1, 2,...., n} ∃ (α i , βi ) de Z 2 tel que ri = (βia - αib). (-1)i+1.

En particulier, il existe (α n , βn ) de Z² tel que : rn = (βna - αnb) (-1)n+1

rn = a ∧ b = au + bv
u = β n . (−1) n +1
avec 
v = α n . (−1) n

* Pour i = 1 r1 = a – bq1
⇒ α1 = q 1 β1 = 1
** Supposons que : ∀p∈ {1,........, n - 1}

( )
rp = β p a - α p b (- 1)p +1


( )
rp -1 = βp −1a - α p -1b (- 1)
p

et démontrons que :

( )
rp +1 = β p +1a - α p +1b (- 1)p

En effet on a : rp-1 = rp qp+1 + rp+1.


rp+1 = rp-1 - rpqp+1
1
( ) ( )
rp +1 = β p −1a − α p −1b (- 1)p − β p a − α p b q p +1 (-1)p +1
[( ) ( )]
rp +1 = (-1)p β p q p +1 + β p −1 a − α p q p +1 + α p −1 b

β p +1 = β p q p +1 + β p -1
Posons :
α p +1 = α p q p +1 + α p -1

[
d’où rp +1 = (−1) p β p +1 a - α p +1 b ]
***Conclusion :

∀i ∈ {1,2,..., n} ∃ (α i , βi ) ∈ Z 2 tel que ri = (βi a - α i b )(- 1)i +1

βp +1 = βp q p +1 + βp −1
La procédure est : 
α p +1 = α p q p +1 + α p −1

β p +1  β p β p -1  q p +1 
 =  
 p +1  α p α p -1  1 
α

rn = a ∧ b.
rn = dernier reste non nul dans l’algorithme d’Euclide.

rn = (β n a − α n b ) x (- 1)n +1 .
On calcule βn, αn pour l’exemple P171 tome 2. 4math avec cette procédure.
a = 22826 b = 537
i 1 2 3 4 5 6
ri 272 265 7 6 1 0
qi 42 1 1 37 1 6

a = b x q1 + r1
22826 = 537 x 42 +272
r1 = a – b x q1 = β1a - α1b
272=22826-537x42
β1 = 1 ; α1 = q1
(β1 = 1 ; α1 = 42)

2
b = r1 q2 + r2
r2=b – r1 q2
r2= b – (a – bq1) q2
r2 = -q2 a + (1 + q1 q2) b
r2 = - β2 a + α2 b
β2 = q2 ; α2 = 1 + q1 q2
(β2 = 1 ; α2 = 1 + 42 x 1)
(β2 = 1 ; α2 = 43)
β1  0 1 q1  0 1 42 1 
α  = 1 0 1  = 1 =
0 1  42
 1    
β 2  β1 0 q 2  1 0  1 1 
α  = α 1 1  = 42    = 
 2  1    1 1 43
β3  β 2 β1  q 3  1 1  1 2 
α  =  α α1  1  = 43    =  
 3  2    42 1 85
β 4  β3 β2  q 4   2 1  37
α  = α α 2  1  = 85 43 1 
 4  3   
β5  β 4 β3  q 5  75 2  1  77 
α  = α α  1  3188 85 1 = 3273
 5  4 3       
→b
β6  β5 β 4  q 6  77 75  6 537 
α  = α α  1  3273 3188 1  =  22826 
 6  5 4       → a
r6 = 0 et r5 ≠ 0

r5 = (− 1)6 x [β5 a − α 5b]


1 = 77x22826 – 3273x537
u = 77

v = −3273
u = 77
Ainsi  est une solution particulière de l’équation dans ZxZ : 22826x+537y=1
 v = −3273

3
PROGRAMMATION :
PROGRAM BEZOUT
{Ce programme permet de chercher une solution particulière
u et v de l'équation a*X+b*Y=1
afin de résoudre l'équation dans ZXZ : a*X+b*Y=c }
uses wincrt ;
type tab = array [0..79] of longint ;
var t1,t2 :tab ;
a,b,i,c,d,u,v :longint ;
Function PGCD(a,b : longint ):longint ;
{Cette fonction permet de determiner le PGCD de a et b
qui servira plus tard pour la saisie de a et b }
var c,d,e :longint ;
begin
if (abs(a)<=abs(b))
then
begin c:= abs(b) ;
d:= abs(a) ;
end
else
begin d:= abs(b) ;
c:= abs(a) ;
end ;
while (c mod d <>0) do
begin
e := c mod d ;
c := d ;
d := e ;
end ;
Pgcd := d ;
end ;
procedure quotient(a,b :longint ; var t1 :tab; var i :longint ) ;
{Procédure servant a calculer les quotients de la division
euclidienne de a par b }
var j : longint ;
begin
i :=0 ;
repeat
i := i +1 ;
j := a mod b ;
t1[i]:= a div b ;
a := b ;
b := j ;
until j =0 ;
end ;
4
Procedure Saisir(var a:longint ; var b:longint) ;
{Procedure ayant pour but de contrôler la saisie de a et b
suivant les condition de l'identité de Bezout }
begin
repeat
writeln('Donner deux entiers a et b premiers entre eux ') ;
readln (a,b) ;
until ((a<>0) and (b<>0) and ( pgcd(a,b) =1 )) ;
end ;
Procedure cal(t1:tab;i:longint;var u :longint;var v :longint) ;
{Procedure servant a calculer les entiers u et v }
var t2 :tab ;
j :longint ;
t3 :tab ;
begin
t3[1] :=1 ;
t3[2] :=t1[2] ;
t2[1]:=t1[1] ;
t2[2]:=t1[2] * t2[1] +1 ;
for j :=3 to i do
begin
t2[j] := t1[j] * t2[j-1] + t2[j-2] ;
t3[j] := t1[j] * t3[j-1] + t3[j-2] ;
end ;
v := t3[i-1] ;
u := t2[i-1] ;
end ;
Procedure iden(a,b,u,v :longint) ;
Begin
if ( a*u+b*v=1)
then write('u=',u,' v=',v)
else if (-a*u+b*v=1)
then write('u=-',u,' et v=',v)
else if (a*u-b*v=1)
then write('u=',u,' et v=-',v)
else if (-a*u-b*v=1)
then write('u=-',u,' et v=-',v)
else if ( a*v+b*u=1)
then write('u=',v,' et v=',u)
else if (-a*v+b*u=1)
then write('u=-',v,' et v=',u)
else if (a*v-b*u=1)
then write('u=',v,' et v=-',u)
else if (-a*v-b*u=1)
then write('u=-',v,' et v=-',u) ;
end ;
5
{Série de test permettant de reconnaître u et v ainsi que
de savoir le signe de chacun }

BEGIN ;
Saisir (a,b) ;
if (abs(a)<=abs(b))
then
begin c:= abs(b) ;
d:= abs(a) ;
end
else
begin d:= abs(b) ;
c:= abs(a) ;
end ;
quotient (c,d,t1,i) ;
cal(t1,i,u,v) ;
writeln ('a=',a,' et b=',b) ;
iden(a,b,u,v) ;
END .
{Programme écrit par Ahmed Douik de la 4 Math 6 lycée Pilote
BourguibaTunis sous la direction de Mr Ben Jedidia Chokri }

6
7

Vous aimerez peut-être aussi