Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Чет про программирование / туф / 14_numeric / ext_euclid
.pas {$mode objfpc}
var
m, m1, x, x1: integer;
function extended_euclid(a, b: integer; var a1, b1: integer): integer;
var
original_a, original_b, t: integer;
aa, ab, ba, bb, ta, tb: integer;
begin
writeln('extended euclid for ', a, ' ', b);
original_a := a;
original_b := b;
aa := 1; ab := 0;
ba := 0; bb := 1;
while a <> 0 do begin
ta := aa;
tb := ab;
t := a;
aa := ba - ta*(b div a);
ab := bb - tb*(b div a);
a := b - a*(b div a);
ba := ta;
bb := tb;
b := t;
writeln(a, ' ', b);
end;
writeln('gcd = ', b);
writeln(original_a, '*', ba, ' + ', original_b, '*', bb, ' = ', b);
result := b;
a1 := ba; b1 := bb;
end;
begin
read(m, x);
extended_euclid(m, x, m1, x1);
writeln(x, '*', x1, ' mod m = ', (x*x1) mod m);
end.
var
m, m1, x, x1: integer;
function extended_euclid(a, b: integer; var a1, b1: integer): integer;
var
original_a, original_b, t: integer;
aa, ab, ba, bb, ta, tb: integer;
begin
writeln('extended euclid for ', a, ' ', b);
original_a := a;
original_b := b;
aa := 1; ab := 0;
ba := 0; bb := 1;
while a <> 0 do begin
ta := aa;
tb := ab;
t := a;
aa := ba - ta*(b div a);
ab := bb - tb*(b div a);
a := b - a*(b div a);
ba := ta;
bb := tb;
b := t;
writeln(a, ' ', b);
end;
writeln('gcd = ', b);
writeln(original_a, '*', ba, ' + ', original_b, '*', bb, ' = ', b);
result := b;
a1 := ba; b1 := bb;
end;
begin
read(m, x);
extended_euclid(m, x, m1, x1);
writeln(x, '*', x1, ' mod m = ', (x*x1) mod m);
end.