Procedures (anyone using this 'live' needs to exectute this section to perform independent computations) 

 

 

 

> with(numtheory):

# 00:

PRFAC := proc(le, la, p, alpha) local r, k; r := le; for k from (le+1) to la do

          r := mods(r*k, p^alpha) od; r; end:

# 01:

PI := proc(n, M, i) local k, r; r := 1: for k from floor(((i-1)*(n-1)/M + 1)) to i*(n-1)/M do

if igcd(n, k) = 1 then r := mods(r*k, n); fi; od; r; end:

# 02:

residues := proc(n, M) [seq(mods(op(i, factorset(n)), M), i = 1..nops(factorset(n)))] end:

# 03:

the_ones := proc(n, M) local L, p; L := []: for p in factorset(n) do if p mod M = 1
           then L := [op(L), p] fi od; L; end:

# 04:

the_minus_ones := proc(n, M) local L, p; L := []: for p in factorset(n) do if mods(p, M) = -1
                 then L := [op(L), p] fi od; L; end:
# 05:

Pow := proc(n, p) local t, a; t := n: a := 0: while t mod p = 0 do t := t/p: a := a+1: od: a; end:

a_sign := proc(p) local S2, a;

          S2 := op(sum2sqr(p)):

       if op(1, S2) mod 2 = 1 then a := op(1, S2)

     else a := op(2, S2) fi:

       if a mod 4 = 1 then a; else -a fi:

         end:
 

>
 

>