Karim Belabas on Wed, 14 Dec 2005 13:28:47 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: modular exponentiation |
* Alain SMEJKAL [2005-12-14 00:26]: > I did not look at Pari code but I hope that this conditional warning test is > done at no extra cost, > else it would be a luxury only for advising user under rare condition. No extra cost, see below. > The warning strategy remains unclear, is it limited to Eulerphi() > practicable calculation? > Seeing these trivial and all unneficients cases there is only one warning : > > ? Mod(10,1000)^1000000000 > %958 = Mod(0, 1000) > > ? Mod(10,1000)^10000000000 > > *** Warning: multiword exponent in Fl_pow. > %959 = Mod(0, 1000) > > ? Mod(10,10000000000)^10000000000000000000 > %960 = Mod(0, 10000000000) The exact strategy is as follows. If the modulus is word-sized (say < 2^32), the powering is done directly with 'unsigned longs' (using Fl_pow() ), not with all the (expensive) overhead of multiprecision. BUT if the exponent happens not to be word-sized, we cannot use Fl_pow(), or any routine for powering modulo C longs with multiprecision exponents. In fact no such routine exist because it just signals a major inefficiency ( eulerphi() is always trivial to compute in these cases ). This test is just here to avoid an error in a conversion routine from multiprecision integers. It occurs iff modulus < 2^32 |exponent| >= 2^32 If the warning is a nuisance, I can disable it unless 'debuglevel' is positive. 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]