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]