+
-
*
/
x-1
x * <multiplicative_inverse_of_x> := 1
{}
5 + 4 := := (mod 7)
5 + 4 ≡ 2 (mod 7)
5 + 4 ≅ 2 (mod 7)
6 + 1 := := (mod 7)
6 + 1 ≡ 0 (mod 7)
6 + 1 ≅ 0 (mod 7)
1 - 4 := := (mod 7)
2 - 4 ≡ 5 (mod 7)
2 - 4 ≅ 5 (mod 7)
2 - 3 := := (mod 7)
5 * 2 := := (mod 7)
5 * 2 ≡ 3 (mod 7)
5 * 2 ≅ 3 (mod 7)
3 * 4 := := (mod 7)
6 * 3 := := (mod 7)
* (mod 7) | 0 1 2 3 4 5 6 ----------+-------------- 0 | 0 0 0 0 0 0 0 1 | 0 1 2 3 4 5 6 2 | 0 2 4 6 1 3 5 3 | 0 3 6 2 5 1 4 4 | 0 4 1 5 2 6 3 5 | 0 5 3 1 6 4 2 6 | 0 6 5 4 3 2 1
x * <multiplicative_inverse_of_x> := 1 (mod 7)
x * x-1 := 1 (mod 7)
5 * := := 1 (mod 7)
5-1 := (mod 7)
3-1 := (mod 7)
2 * := := 1 (mod 7)
2-1 := (mod 7)
4-1 := (mod 7)
6 * := := 1 (mod 7)
1 * := 1 (mod 7)
(mod 7)
2/5 (mod 7)
0.4 mod 7
x/y (mod f)
x/y == x * 1/y
x * y-1
2/5 := 2 * 5-1 := 2 * := (mod 7)
6/4 := 6 * 4-1 := 6 * := := (mod 7)
3/3 := 3 * 3-1 := 3 * := := (mod 7)
f
(mod f)
5 * := 1 (mod 9)
4 * := 1 (mod 9)
8 * := 1 (mod 9)
3 * := 1 (mod 9)
6 * := 1 (mod 9)
e
0 < e < f
d
e (mod f)
int multiplicative_inverse_of_e_mod_f(int e, int f) { assert 0 < e && e < f; int x = e, y = f; int q = 0, z_prev = 1, z = 0; while ( x != 0 ) { int z_next = z_prev - q*z; z_prev = z; z = z_next; q = y/x; int x_next = y % x, y_next = x; x = x_next; y = y_next; } assert y == 1; // condition for e to be // relatively prime to f return z <= 0 ? z + f : z; }
multiplicative_inverse_of_e_mod_f(5,9)
int multiplicative_inverse_of_e_mod_f(int e , int f ) { assert e > 0 ; x y q z_prev z int x = e, y = f; q z_prev z int q = 0, z_prev = 1, z = 0; x y while ( x != 0 ) { x y q z_prev z int z_next = z_prev - q*z x y q z_prev z - * x y q z_prev z x y q z_prev z z_prev = z; x y q z z = z_next; x y q z_prev q = y/x; x y z_prev z int x_next = y % x, y_next = x; x y q z_prev z x y q z_prev z x y q z_prev z x = x_next; y q z_prev z y = y_next; x q z_prev z } x y q z_prev z while ( x != 0 ) { x y q z_prev z int z_next = z_prev - q*z x y q z_prev z - * x y q z_prev z x y q z_prev z z_prev = z; x y q z z = z_next; x y q z_prev q = y/x; x y z_prev z int x_next = y % x, y_next = x; x y q z_prev z x y q z_prev z x y q z_prev z x = x_next; y q z_prev z y = y_next; x q z_prev z } x y q z_prev z while ( x != 0 ) { x y q z_prev z int z_next = z_prev - q*z x y q z_prev z - * x y q z_prev z x y q z_prev z z_prev = z; x y q z z = z_next; x y q z_prev q = y/x; x y z_prev z int x_next = y % x, y_next = x; x y q z_prev z x y q z_prev z x y q z_prev z x = x_next; y q z_prev z y = y_next; x q z_prev z } x y q z_prev z while ( x != 0 ) x y q z_prev z assert y == 1 ; x y q z_prev z return z <= 0 ? z + f : z; x y q z_prev z x y q z_prev z }
5 (mod 9)
multiplicative_inverse_of_e_mod_f(3,7)
int multiplicative_inverse_of_e_mod_f(int e , int f ) { assert e > 0 ; x y q z_prev z int x = e, y = f; q z_prev z int q = 0, z_prev = 1, z = 0; x y while ( x != 0 ) { x y q z_prev z int z_next = z_prev - q*z x y q z_prev z - * x y q z_prev z x y q z_prev z z_prev = z; x y q z z = z_next; x y q z_prev q = y/x; x y z_prev z int x_next = y % x, y_next = x; x y q z_prev z x y q z_prev z x y q z_prev z x = x_next; y q z_prev z y = y_next; x q z_prev z } x y q z_prev z while ( x != 0 ) { x y q z_prev z int z_next = z_prev - q*z x y q z_prev z - * x y q z_prev z x y q z_prev z z_prev = z; x y q z z = z_next; x y q z_prev q = y/x; x y z_prev z int x_next = y % x, y_next = x; x y q z_prev z x y q z_prev z x y q z_prev z x = x_next; y q z_prev z y = y_next; x q z_prev z } x y q z_prev z while ( x != 0 ) x y q z_prev z assert y == 1 ; x y q z_prev z return z <= 0 ? z + f : z; x y q z_prev z x y q z_prev z x y q z_prev z }
3 (mod 7)
()
(ae)d mod m :=
f :=
(m) := (p-1)·(q-1) := · :=
'A'→'' 'B'→'' 'C'→'' 'D'→'' 'E'→'' · · · 'V'→'' 'W'→'' 'X'→'' 'Y'→'' 'Z'→''
#!/usr/bin/perl -s $f=$d?-1:1;$D=pack('C*',33..86);$p=shift; $p=~y/a-z/A-Z/;$U='$D=~s/(.*)U$/U$1/; $D=~s/U(.)/$1U/;';($V=$U)=~s/U/V/g; $p=~s/[A-Z]/$k=ord($&)-64,&e/eg;$k=0; while(<>){y/a-z/A-Z/;y/A-Z//dc;$o.=$_}$o.='X' while length ($o)%5&&!$d; $o=~s/./chr(($f*&e+ord($&)-13)%26+65)/eg; $o=~s/X*$// if $d;$o=~s/.{5}/$& /g; print"$o\n";sub v{$v=ord(substr($D,$_[0]))-32; $v>53?53:$v} sub w{$D=~s/(.{$_[0]})(.*)(.)/$2$1$3/} sub e{eval"$U$V$V";$D=~s/(.*)([UV].*[UV])(.*)/$3$2$1/; &w(&v(53));$k?(&w($k)):($c=&v(&v(0)),$c>52?&e:$c)}
M
M := 0708
708
Me mod m
70891 mod 10001
multiplicative_inverse_of_e_mod_f(91, 9792)
(Me mod m)d mod m := 24194627 mod 10001 :=