June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
24
Task/Modular-inverse/C-sharp/modular-inverse.cs
Normal file
24
Task/Modular-inverse/C-sharp/modular-inverse.cs
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
public class Program
|
||||
{
|
||||
static void Main()
|
||||
{
|
||||
System.Console.WriteLine(42.ModInverse(2017));
|
||||
}
|
||||
}
|
||||
|
||||
public static class IntExtensions
|
||||
{
|
||||
public static int ModInverse(this int a, int m)
|
||||
{
|
||||
if (m == 1) return 0;
|
||||
int m0 = m;
|
||||
(int x, int y) = (1, 0);
|
||||
|
||||
while (a > 1) {
|
||||
int q = a / m;
|
||||
(a, m) = (m, a % m);
|
||||
(x, y) = (y, x - q * y);
|
||||
}
|
||||
return x < 0 ? x + m0 : x;
|
||||
}
|
||||
}
|
||||
2
Task/Modular-inverse/Factor/modular-inverse.factor
Normal file
2
Task/Modular-inverse/Factor/modular-inverse.factor
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
USE: math.functions
|
||||
42 2017 mod-inv
|
||||
27
Task/Modular-inverse/GW-BASIC/modular-inverse.gw-basic
Normal file
27
Task/Modular-inverse/GW-BASIC/modular-inverse.gw-basic
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
10 ' Modular inverse
|
||||
20 LET E% = 42
|
||||
30 LET T% = 2017
|
||||
40 GOSUB 1000
|
||||
50 PRINT MODINV%
|
||||
60 END
|
||||
|
||||
990 ' increments e stp (step) times until bal is greater than t
|
||||
992 ' repeats until bal = 1 (mod = 1) and returns count
|
||||
994 ' bal will not be greater than t + e
|
||||
1000 LET D% = 0
|
||||
1010 IF E% >= T% THEN GOTO 1140
|
||||
1020 LET BAL% = E%
|
||||
1025 ' At least one iteration is necessary
|
||||
1030 LET STP% = ((T% - BAL%) \ E%) + 1
|
||||
1040 LET BAL% = BAL% + STP% * E%
|
||||
1050 LET COUNT% = 1 + STP%
|
||||
1060 LET BAL% = BAL% - T%
|
||||
1070 WHILE BAL% <> 1
|
||||
1080 LET STP% = ((T% - BAL%) \ E%) + 1
|
||||
1090 LET BAL% = BAL% + STP% * E%
|
||||
1100 LET COUNT% = COUNT% + STP%
|
||||
1110 LET BAL% = BAL% - T%
|
||||
1120 WEND
|
||||
1130 LET D% = COUNT%
|
||||
1140 LET MODINV% = D%
|
||||
1150 RETURN
|
||||
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.
|
||||
37
Task/Modular-inverse/PureBasic/modular-inverse.purebasic
Normal file
37
Task/Modular-inverse/PureBasic/modular-inverse.purebasic
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
EnableExplicit
|
||||
Declare main()
|
||||
Declare.i mi(a.i, b.i)
|
||||
|
||||
If OpenConsole("MODULAR-INVERSE")
|
||||
main() : Input() : End
|
||||
EndIf
|
||||
|
||||
Macro ModularInverse(a, b)
|
||||
PrintN(~"\tMODULAR-INVERSE(" + RSet(Str(a),5) + "," +
|
||||
RSet(Str(b),5)+") = " +
|
||||
RSet(Str(mi(a, b)),5))
|
||||
EndMacro
|
||||
|
||||
Procedure main()
|
||||
ModularInverse(42, 2017) ; = 1969
|
||||
ModularInverse(40, 1) ; = 0
|
||||
ModularInverse(52, -217) ; = 96
|
||||
ModularInverse(-486, 217) ; = 121
|
||||
ModularInverse(40, 2018) ; = -1
|
||||
EndProcedure
|
||||
|
||||
Procedure.i mi(a.i, b.i)
|
||||
Define x.i = 1,
|
||||
y.i = Int(Abs(b)),
|
||||
r.i = 0
|
||||
If y = 1 : ProcedureReturn 0 : EndIf
|
||||
While x < y
|
||||
r = (a * x) % b
|
||||
If r = 1 Or (y + r) = 1
|
||||
Break
|
||||
EndIf
|
||||
x + 1
|
||||
Wend
|
||||
If x > y - 1 : x = -1 : EndIf
|
||||
ProcedureReturn x
|
||||
EndProcedure
|
||||
Loading…
Add table
Add a link
Reference in a new issue