Karim Belabas on Sat, 14 Mar 2009 23:40:14 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Avoiding a znlog() computation


* Kurt Foster [2009-03-14 17:13]:
> Suppose that a and b are given, and for some prime p you know that
>
> n1 = znorder(Mod(a,p),p-1)
>
> and
>
> Mod(b,p)^n1 == Mod(1,p).
>
> Then the multiplicative order n2 of b (mod p) is automatically a divisor 
> of n1, so we can compute it using n2 = znorder(Mod(b.p),n1).
>
> Then alpha = Mod(a,p)^(n1/n2) has multiplicative order n2, so
>
> Mod(b,p) = alpha^k
>
> for a unique k in (0, n2) with gcd(k, n2) ==1.
>
> The problem is, how to determine k.  One way is to let
>
> g = znprimroot(p); l1 = znlog(alpha,g);l2 =znlog(b,p);k=lift(Mod(l2/ 
> l1,n2))

l2 =znlog(b,g), I guess ?

> but this entails finding a primitive root and TWO znlog()s.  Given that 
> Mod(k,n2) is already known to be well defined, is there a more  
> direct/faster way to compute it?

Only in current svn: simply use

  znlog(b, alpha, n1)

e.g.

  ? a = Mod(4,13); b = Mod(3,13);
  ?  znlog(b, a, znorder(a))
  %1 = 2

Cheers,

    K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`