June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
43
Task/Modular-inverse/Modula-2/modular-inverse.mod2
Normal file
43
Task/Modular-inverse/Modula-2/modular-inverse.mod2
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
MODULE ModularInverse;
|
||||
FROM InOut IMPORT WriteString, WriteInt, WriteLn;
|
||||
|
||||
TYPE Data = RECORD x : INTEGER;
|
||||
y : INTEGER
|
||||
END;
|
||||
|
||||
VAR c : INTEGER;
|
||||
ab : ARRAY [1..5] OF Data;
|
||||
|
||||
PROCEDURE mi(VAR a, b : INTEGER): INTEGER;
|
||||
VAR t, nt, r, nr, q, tmp : INTEGER;
|
||||
|
||||
BEGIN
|
||||
b := ABS(b);
|
||||
IF a < 0 THEN a := b - (-a MOD b) END;
|
||||
t := 0; nt := 1; r := b; nr := a MOD b;
|
||||
WHILE (nr # 0) DO
|
||||
q := r / nr;
|
||||
tmp := nt; nt := t - q * nt; t := tmp;
|
||||
tmp := nr; nr := r - q * nr; r := tmp;
|
||||
END;
|
||||
IF (r > 1) THEN RETURN -1 END;
|
||||
IF (t < 0) THEN RETURN t + b END;
|
||||
RETURN t;
|
||||
END mi;
|
||||
|
||||
BEGIN
|
||||
ab[1].x := 42; ab[1].y := 2017;
|
||||
ab[2].x := 40; ab[2].y := 1;
|
||||
ab[3].x := 52; ab[3].y := -217;
|
||||
ab[4].x := -486; ab[4].y := 217;
|
||||
ab[5].x := 40; ab[5].y := 2018;
|
||||
WriteLn;
|
||||
WriteString("Modular inverse");
|
||||
WriteLn;
|
||||
FOR c := 1 TO 5 DO
|
||||
WriteInt(ab[c].x, 6); WriteString(", ");
|
||||
WriteInt(ab[c].y, 6); WriteString(" = ");
|
||||
WriteInt(mi(ab[c].x, ab[c].y),6);
|
||||
WriteLn;
|
||||
END;
|
||||
END ModularInverse.
|
||||
Loading…
Add table
Add a link
Reference in a new issue