Professional Documents
Culture Documents
Tnh a mod n
To bng:
x
in gi tr x
a
in gi tr a
d=1
Khi to d=1
35
mod 79
d=1
35
15
15
17
67
57
65
38
22
10
17
Khi to d=1
X l => tnh li d, x, a trong IF
d := d * (a mod n) = 1 * (15 mod 79) = 15
x := x div 2 = 35 div 2 = 17
a := (a * a) mod n = (15 * 15) mod 79 = 67
X l => tnh li d, x, a tng t trn
Gi m m phng:
d := 1;
while (x <> 0) do begin
if (x mod 2 <> 0) then begin
d := d * (a mod n);
end;
x := x div 2;
a := (a * a) mod n;
end;
exit(d); {gi tr cn tnh}
-1
mod m
Tng qut:
Gi tr in sn:
x1 = m; a1 = 1; b1 = 0
in gi tr m
Rng
x2 = n; a2 = 0; b2 = 1
in gi tr n
y2
xi
ai
bi
yi
Gi tr tnh ton:
xi = xi-2 mod xi-1
yi = xi-1 div xi
x
79
35
9
8
1
VD2: 19
1
2
3
4
5
6
-1
-1
x
26
19
7
5
2
1
mod 79
a
1
0
1
-3
b
0
1
-2
9
-9
y
2
3
1
mod 26
a
1
0
b
0
1
-1
3
-4
11
y
1
2
1
2
Kt qu: 11
Thc t, tm p s ca , ch cn tnh
3 ct x, b, y. Ct a khng cn tnh.
Gi m m phng:
var x, a, b, y: array;
var i: integer;
x[0] := m; x[1] := n;
a[0] := 1; a[1] := 0;
b[0] := 0; b[1] := 1;
if (a = 1) then exit(1)
else if (ucln(n,m) = 1) then exit(null)
else begin
I := 1;
while (x[i] > 1) do begin
y[i] := x[i-1] div x[i];
i := i + 1;
x[i] := x[i-2] div x[i-1];
a[i] := a[i-2] (a[i-1] * y[i-1]);
b[i] := b[i-2] (b[i-1] * y[i-1]);
end;
while (b[i-1] < 0) do b[i-1] := b[i-1] + m;
exit(b[i-1]);
end;
About me
Author:
Gmail:
Facebook:
Demo online:
Source code:
Tng Huynh
tunghuynh.tn@gmail.com
www.facebook.com/tunghuynh.tn
http://tunghuynh.com/atbmtt
http://tunghuynh.com/atbmtt/soft
Moderator at VN-Zoom.com
Studied at ICTU - Thi Nguyn