znprimroot(2)
znprimroot(4)
znprimroot(8)
p=9223372036854775837;
znprimroot(p)
znprimroot(p^2)
znprimroot(2*p^2)
znprimroot([2,1;p,2])
znprimroot([2*p^2,[2,1;p,2]])
znstar(0)
znstar(1)
znstar(10)
znstar(14)
znstar(247)
znstar(-247)
znstar(factor(-247))
znstar(factor(0))
Mod(10,148)^(2^64)
do(n)= {
  g = Mod(3,n); phi = eulerphi(n); G = g^(phi-1);
  o = znorder(g, phi); fo = factor(o);
  [znlog(G,g), znlog(G,g,o), znlog(G,g,fo), znlog(G,g,[o,fo])];
}
do(2^5*5^3*7)
do(2^3*5^2*nextprime(10^10)^2)

znlog(7,Mod(3,8),znorder(Mod(3,8)))
znlog(7,Mod(3,8))
znlog(0,Mod(3,4))
znlog(0,Mod(3,4),1)
znlog(1,Mod(3,4))
znlog(1,Mod(3,4),1)
znlog(0,Mod(2,4))
znlog(0,Mod(2,4),1)
znlog(6,Mod(2,7),znorder(Mod(2,7)))
znlog(3,Mod(3,8),znorder(Mod(3,8)))
znlog(5,Mod(2,401))

znlog(7,3+O(2^3))
znlog(7,3+O(2^3), znorder(Mod(3,8)))
znlog(7,3+O(7^3))
znlog(2,3+O(7^3))

{
for (i = 1,10^4,
  d = eulerphi(i);
  if (!istotient(d, &n) || eulerphi(n) != d, error(i)))
}
Mod(1,2)-Mod(2,4)

p=2^80+13; znlog(Mod(3,p),Mod(2,p))
p=314138927;znlog(Mod(p\17,p),znprimroot(p))

g=Mod(3,11);
v=[I,-1,Mat(1),matid(2)/2,Mat([5,1])];
a=Mod(-1,11); for(i=1,#v, print(iferr(znlog(a,g,v[i]),E,E)));

bnr = bnrinit(bnfinit(x), [160,[1]], 1);
g = bnr.gen;
bnrchar(bnr, g, [1/2,0,0])
bnrchar(bnr, [g[1],g[3]])
bnrchar(bnr, [1,0,0;0,1,0;0,0,2])
H=[4,1,0; 0,1,0; 0,0,2];
bnrchar(bnr, H)
bnrchar(bnr, H, [0,1/2,0])
H=[8,4,2;0,2,1;0,0,1];
bnrchar(bnr, H, [0,1/2,1/2])
bnrchar(bnr, H, [0,0,1/2])

G=idealstar(,8);
znconreychar(G,2) \\error
znconreychar(G,1)
znconreychar(G,3)
znconreychar(G,5)
znconreychar(G,7)
vector(4, i, zncharisodd(G,2*i-1))
forstep(i=1,8,2,if(znconreyexp(G, znconreylog(G, i)) != i, error(i)));

G=idealstar(,5);
vector(4,i,znconreychar(G,i))

G=idealstar(,75);
for(i=1, G.mod,\
  if (gcd(i,G.mod)==1 && 2*chareval(G,i,-1) != zncharisodd(G,i),error(i)))
znconreychar(G,1)
znconreychar(G,2)
znconreychar(G,11)
chi=znconreychar(G,71)
charorder(G,chi)
charorder(G,71)
charorder(G,znconreylog(G,71))
chareval(G,chi,1)
chareval(G,chi,5)
chareval(G,chi,1/3)
chareval(G,chi,7/2)
chareval(G,71,7/2)
chareval(G,znconreylog(G,71),7/2)
chareval(G,chi,2, 10)
chareval(G,chi,2, 20)
chareval(G,chi,2, [x,10])
chareval(G,chi,2, [x,20])
chareval(G,chi,2, [vector(10,i,i), 10])

log11 = ideallog(, 11, G);
znconreylog(G,log11)
znconreylog(G,11)

znconreyconductor(G, 1)
znconreyconductor(G, 4)
znconreyconductor(G, 2)
znconreyconductor(G, 2, &chi)
chi
{
for (i=1,75,
  if (gcd(i,75)==1,
    f = znconreyconductor(G,i,&chi0);
     if (f != 75, print(i,":",f,":", chi0))))
}
test(G, chi)=
{
  N = znconreyconductor(G, chi);
  N0 = znconreyconductor(G, chi, &chi0);
  if (N != N0, error(chi));
  print([N0, chi0]);
  G0 = idealstar(,N0); L = znconreylog(G,chi);
  if (zncharinduce(G0, chi0, G.mod) != L, error(chi));
  if (zncharinduce(G0, chi0, G) != L, error(chi));
}
G = idealstar(,8);
test(G,1)
test(G,3)
test(G,5)
test(G,7)
G = idealstar(,48);
for(i=1,48,if(gcd(i,48)==1,test(G,i)))

G = idealstar(,126000);
test(G,1009)
test(G,82127)

znconreyexp(G, znconreylog(G, 1009))
znconreyexp(G, znconreylog(G, 82127))
chi=[100,1,0,1,0];
l=znconreylog(G, chi)
znconreychar(G,l) == chi
znconreyexp(G,l)

G2=idealstar(,6);
G=idealstar(,1);
znconreychar(G,1)
znconreylog(G,1)
test(G,1)
chareval(G,[]~,1)
chareval(G,[],1)
chareval(G,1,1)
zncharinduce(G,1,6)
zncharinduce(G,1,G2)

G=idealstar(,2);
znconreychar(G,1)
znconreylog(G,1)
test(G,1)
chareval(G,[]~,2)
chareval(G,[],2)
chareval(G,[],1)
chareval(G,1,2)
chareval(G,1,1)
zncharinduce(G,[]~,3)
zncharinduce(G,1,6)
zncharinduce(G,1,G2)

G=idealstar(,30);
znconreyconductor(G, 29)
