Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compute modular inverses of integers faster #2053

Merged
merged 4 commits into from
Jan 9, 2018

Commits on Jan 8, 2018

  1. Configuration menu
    Copy the full SHA
    e415fb2 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    e683d90 View commit details
    Browse the repository at this point in the history
  3. kernel: speed up InverseModInt for small inputs

    Before (on a 64 bit machine):
    
    gap> q:=3;;n:=7;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    360
    gap> q:=3;;n:=2^59;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    350
    gap> q:=3;;n:=2^60;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    373
    gap> q:=3^60;;n:=7;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    380
    gap> q:=3^60;;n:=2^59;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    1234
    gap> q:=3^60;;n:=2^60;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    1256
    gap> q:=2^6000;;n:=3^6000;; for i in [1..6000] do INVMODINT(q,n); od; time;
    637
    
    After:
    
    gap> q:=3;;n:=7;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    222
    gap> q:=3;;n:=2^59;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    219
    gap> q:=3;;n:=2^60;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    350
    gap> q:=3^60;;n:=7;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    205
    gap> q:=3^60;;n:=2^59;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    1193
    gap> q:=3^60;;n:=2^60;; for i in [1..2000000] do INVMODINT(q,n); od; time;
    1257
    gap> q:=2^6000;;n:=3^6000;; for i in [1..6000] do INVMODINT(q,n); od; time;
    653
    fingolfin committed Jan 8, 2018
    Configuration menu
    Copy the full SHA
    14d9ca1 View commit details
    Browse the repository at this point in the history
  4. kernel: simplify and sped up ModRat using InverseModInt

    Before (on a 64 bit machine):
    
    gap> q:=1/3;;n:=7;; for i in [1..2000000] do x:= q mod n; od; time;
    258
    gap> q:=1/3;;n:=2^59;; for i in [1..2000000] do x:= q mod n; od; time;
    295
    gap> q:=1/3;;n:=2^60;; for i in [1..2000000] do x:= q mod n; od; time;
    569
    gap> q:=1/3^60;;n:=7;; for i in [1..2000000] do x:= q mod n; od; time;
    537
    gap> q:=1/3^60;;n:=2^59;; for i in [1..2000000] do x:= q mod n; od; time;
    2364
    gap> q:=1/3^60;;n:=2^60;; for i in [1..2000000] do x:= q mod n; od; time;
    2821
    gap> q:=1/2^6000;;n:=3^6000;; for i in [1..6000] do x:= q mod n; od; time;
    19358
    
    After:
    
    gap> q:=1/3;;n:=7;; for i in [1..2000000] do x:= q mod n; od; time;
    255
    gap> q:=1/3;;n:=2^59;; for i in [1..2000000] do x:= q mod n; od; time;
    244
    gap> q:=1/3;;n:=2^60;; for i in [1..2000000] do x:= q mod n; od; time;
    392
    gap> q:=1/3^60;;n:=7;; for i in [1..2000000] do x:= q mod n; od; time;
    245
    gap> q:=1/3^60;;n:=2^59;; for i in [1..2000000] do x:= q mod n; od; time;
    1219
    gap> q:=1/3^60;;n:=2^60;; for i in [1..2000000] do x:= q mod n; od; time;
    1292
    gap> q:=1/2^6000;;n:=3^6000;; for i in [1..6000] do x:= q mod n; od; time;
    692
    fingolfin committed Jan 8, 2018
    Configuration menu
    Copy the full SHA
    79ec5f3 View commit details
    Browse the repository at this point in the history