| 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]
`