mpz_trial_div

Torbjorn Granlund tege@swox.com
14 Nov 2002 17:12:22 +0100


"Paul Leyland" <pleyland@microsoft.com> writes:

  > From: Torbjorn Granlund [mailto:tege@swox.com] 
  > "Paul Leyland" <pleyland@microsoft.com> writes:
  > 
  >   > Possible , although I think it is unneccessairy (as we have 
  >   > the mpz fn mpz_remove_ui) , consider
  >   > 
  >   > d=mpz_trial_div(N,1,10000);
  >   > m=mpz_remove_ui(N,N,d);
  >   > 
  >   > to cover the multiplicity case
  >   
  >   Fair point.  Thanks.
  > 
  > Not sure that would work.  Assume our number has the factor 3^2*5.
  > mpz_trial_div might find 3*5 and return that.  mpz_remove_ui
  > would then typically leave one factor 3.
  > 
  > Since some usages of mpz_trial_div will only care if any factor is
  > found, we don't want to slow it down by having it figure out any
  > factor multiplicity.
  
  I thought we'd agreed, wrongly it appears, that mpz_trial_div would
  return only prime factors and would always return the smallest such
  (perhaps in the range start--end if those arguments are present).

I haven't yet had time to read all messages in this thread (so I
suppose I should actually keep quiet...).

Is returning just prime factors worth making it slower?
I wrote code for this, for GMP 4.2, about half a year ago
(not yet committed to the cvs repo).

I found that accumulating groups of divisors mod m before
trying trial division (by means of gcd) was an efficient way
of implementing mpz_trial_div.  But of course we may return
non-prime factors.

-- 
Torbjörn