| Karim Belabas on Tue, 13 Dec 2005 14:37:51 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: modular exponentiation |
* Alain SMEJKAL [2005-12-13 12:45]:
> ----- Original Message -----
> From: "Jeroen Demeyer" <J.Demeyer@UGent.be>
> To: "Henk Karssenberg" <henk.karssenberg@hu.nl>
> Cc: <pari-users@list.cr.yp.to>
> Sent: Friday, November 25, 2005 1:54 PM
> Subject: Re: modular exponentiation
>
>
> > Henk Karssenberg wrote:
> > > Dear M.,
> > >
> > > In PARI I try to calculate k = Mod(6682632708227277^28345232917,
> > > 72057594037927889) but this gives an overflow. Is there any option to
> > > calculate Mod(a^m,n) or a^m % n with huge numbers ?
> > >
> > > Thank you & kind regards.
> >
> > Henk,
> >
> > You should do k = Mod(a,n)^m.
> > This works because Mod(a,n) creates an object in Z/nZ.
> >
>
> Dear List,
>
> This method is very efficient but, is there a way to avoid spurious warning
> occuring on large exponents ?
> (Unsuccessfully tried \g debug preference)
>
> ? Mod(10,123456)^10000000000
>
> *** Warning: multiword exponent in Fl_pow.
It is not spurious, it is telling you that you're doing a more difficult
computation than you should.
(14:15) gp > k = 10000000000; N = 123456;
(14:15) gp > Mod(10,N)^k
*** Warning: multiword exponent in Fl_pow.
%2 = Mod(50368, 123456)
(14:15) gp > l = k % eulerphi(N)
%3 = 2560
(14:15) gp > Mod(10,N)^l
%4 = Mod(50368, 123456)
And in fact:
(14:15) gp > for(i=1,10^5, Mod(10,N)^k)
time = 1,446 ms.
(14:15) gp > for(i=1,10^5, Mod(10,N)^l)
time = 148 ms.
Of course, the powering function could compute Euler's phi by itself, since
it's quite easy for small inputs:
(14:18) gp > for(i=1,10^5, eulerphi(N))
time = 119 ms.
But that would still slow down the powering itself almost by a factor 2
for no good reason. So we assume that the user knows what he's doing,
and assume that powering an INTMOD with an exponent much larger than
the modulus must be a bug.
Cheers,
Karim.
--
Karim Belabas 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]