efficiency bug in mpz_powm_ui?

paul zimmermann Paul.Zimmermann at inria.fr
Mon Mar 2 11:01:26 UTC 2020


       Dear Marco,

> > it seems that mpz_powm_ui is highly inefficient when BASE^EXP has about 
> > the
> > same size as MOD, in which case it could first compute BASE^EXP 
> > exactly, then
> > perform only one reduction:
> 
> You are right, mpz_powm_ui does not implement an algorithm that is 
> optimal for every possible use-case. But I'd not consider this a bug :-)
> 
> >   mpz_ui_pow_ui (x, 2, e);
> >   mpz_mod (r1, x, y);
> 
> I'm not sure that mpz_ui_pow_ui (x, 2, e) is the more efficient way to 
> obtain a value x with only the bit e set to 1 :-)
> But of course, in this context, the following _mod dominates 
> asymptotically.
> 
> >   mpz_set_ui (x, 2);
> >   mpz_powm_ui (r2, x, e, y);
> 
> Thanks to a recent change, this function should be faster now, when base 
> is 2:
> https://gmplib.org/repo/gmp/rev/63e53ddfd210

thank you, this solves the issue I reported.

> Even if there is not jet any special code for the special case "BASE^EXP 
> has about the same size as MOD".

indeed, the same issue can happen for other small values of BASE (not only 2).

Best regards,
Paul

PS: while trying the above change, I noticed the daily snapshots are broken
since January 18...


More information about the gmp-bugs mailing list