Lemma von Bachet (DIFF,CM1,S.30)
Für je zwei natürliche Zahlen a und b gibt es ganze Zahlen x und y mit ggT(a,b)=x*a+y*b.
Beispiel
| | | | | | |
|
| | | | | | 0 |
|
| | | | | | 1 |
| |
1001 | = | 4 | * | 203 | + | 189 |
|
| | | | | | 1 |
|
| | | | | | -4 |
| 189=1*1001-4*203 |
203 | = | 1 | * | 189 |
+ | 14 |
|
0 | - | 1 | * | 1 | = |
-1 |
|
1 | - | 1 | * | -4 | = | 5 |
| 14=-1*1001+5*203 |
189 | = | 13 | * | 14 |
+ | 7 | |
1 | - | 13 | * | (-1) | = |
14 | |
-4 | - | 13 | * | 5 | = |
-69 |
| 7=14*1001-69*203 |
14 | = | 2 | * | 7 | + |
0 |
|
| | | | | |
| |
| | | | | |
|
| |
Der Algorithmus erweitert den gewöhnlichen Algorithmus von Euklid um die Berechnung der
Koeffizienten
xi und
yi zur Darstellung des jeweiligen Restes.
Dabei gelten die rekursiven Gleichungen
x
i = x
i-2-c
i*x
i-1 und
y
i = y
i-2-c
i*y
i-1.
Die x
i-1 bzw. x
i-2 (y
i-1 bzw. y
i-2) findet man
dabei in der gleichen Spalte 1 oder 2 Zeilen darüber, c
i ist der
ganzzahlige Quotient in
der gleichen Zeile im Euklid-Schema. Wenn man will, so kann man - wie oben in der letzten Spalte
geschehen - die Darstellung der Reste fortlaufend kontrollieren.
weiteres Beispiel
| | | | | | |
|
| | | | | | 0 |
|
| | | | | | 1 |
| |
1970 | = | 1 | * | 1066 | + | 904 |
|
| | | | | | 1 |
|
| | | | | | -1 |
| 904=1*1970-1*1066 |
1066 | = | 1 | * | 904 | + | 162 |
|
0 | - | 1 | * | 1 | = |
-1 | |
1 | - | 1 | * | (-1) | = |
2 |
| 162=-1*1970+2*1066 |
904 | = | 5 | * | 162 | + | 94 |
|
1 | - | 5 | * | (-1) | = |
6 | |
-1 | - | 5 | * | 2 | = |
-11 |
| 94=6*1970-11*1066 |
162 | = | 1 | * | 94 | + | 68 |
|
-1 | - | 1 | * | 6 | = |
-7 | |
2 | - | 1 | * | (-11) | = |
13 |
| 68=-7*1970+13*1066 |
94 | = | 1 | * | 68 | + | 26 |
|
6 | - | 1 | * | (-7) | = |
13 | |
-11 | - | 1 | * | 13 | = |
-24 |
| 26=13*1970-24*1066 |
68 | = | 2 | * | 26 | + | 16 |
|
-7 | - | 2 | * | 13 | = |
-33 | |
13 | - | 2 | * | (-24) | = |
61 |
| 16=-33*1970+61*1066 |
26 | = | 1 | * | 16 | + | 10 |
|
13 | - | 1 | * | (-33) | = |
46 | |
-24 | - | 1 | * | 61 | = |
-85 |
| 10=46*1970-85*1066 |
16 | = | 1 | * | 10 | + | 6 |
|
-33 | - | 1 | * | 46 | = |
-79 | |
61 | - | 1 | * | (-85) | = |
146 |
| 6=-79*1970+146*1066 |
10 | = | 1 | * | 6 | + | 4 |
|
46 | - | 1 | * | (-79) | = |
125 | |
-85 | - | 1 | * | 146 | = |
-231 |
| 4=125*1970-231*1066 |
6 | = | 1 | * | 4 | + | 2 |
|
-79 | - | 1 | * | 125 | = |
-204 | |
146 | - | 1 | * | (-231) | = |
377 |
| 2=-204*1970+377*1066 |
4 | = | 2 | * | 2 | + |
0 |
|
| | | | | |
| |
| | | | | |
|
| |
Delphi-Programm
Bachet.zip
// DIFF CM1 Algorithmen der elementaren Zahlentheorie, S.32
procedure Bachet(a,b : integer; var g,x,y : integer);
var
bg,bu,cg,cu,xg,xu,yg,yu : integer;
begin
bg := a; cg := 0; xg := 1; yg := 0;
bu := b; cu := a div b; xu := 0; yu := 1;
while (bg <> 0) and (bu <> 0) do
begin
xg := xg-cu*xu; yg := yg-cu*yu; bg := bg mod bu;
if bg = 0
then
begin
g := bu; x := xu; y := yu;
end
else
begin
cg := bu div bg; xu := xu-cg*xg;
yu := yu-cg*yg; bu := bu mod bg;
end;
if bu = 0
then
begin
g := bg; x := xg; y := yg;
end
else
cu := bg div bu;
end;
end;