mpz_prevprime

Marco Bodrato bodrato at mail.dm.unipi.it
Tue Mar 24 19:21:15 UTC 2020


Ciao,

Il 2020-03-24 18:54 Seth Troisi ha scritto:
> On Tue, Mar 24, 2020 at 9:56 AM Marco Bodrato
> <bodrato at mail.dm.unipi.it> wrote:
>> I propose a variation of your patch, you find it attached, on my
>> computer it's faster.
> 
> Couple of small notes but otherwise this looks good
> 
> +/* NP_SMALL_LIMIT = prevprime (LAST_PRIME ^ 2) */
> 
> In the light of the day this can be bumped slightly to
> prevprime(nextprime(LAST_PRIME)^2) - 1 = 316960

I'm not sure.
I mean: with that list of primes we can certify primality up to that 
limit, I agree.
But what about the exit condition?
The current code consider that a number is prime if(n/prime<prime).
To support n > LAST_PRIME^2, we should add one more branch in the loop.

> +  /* Technically this should be prev_prime(LAST_PRIME ^ 2) */
> I'd remove this, It's covered by the comment above

Right.

> +  if (q < prime)
> +    return t;
> +  if (r == 0)
> +    break;
> 
> Can this be rearranged to
> 
> +   if (r == 0)
> +      break;
> +   if (q <= prime)
> +      return t;

I fear it can't. The case t=3, prime=3 would consider 3 a composite.
Moreover I believe that, on some architectures, q can be ready before r 
is, so the order Torbjorn used should reduce latency. But I may be wrong 
on that point.

The case t=3 can be healed with an if(t<9) return t; just before the 
loop. Then we should measure speed on different platforms.
With the order you propose, we may use
NP_SMALL_LIMIT = prevprime (LAST_PRIME * (LAST_PRIME + 1))
right?

> +  ASSERT (i < NUMBER_OF_PRIMES);
> Should this be placed at the start of the loop or be?
> +  ASSERT (i+1 < NUMBER_OF_PRIMES);

The ASSERT on i make sense just before i is used by the instruction 
prime+=primegap[i], i.e. at the end of the loop. Isn't it?

>> If writing the code is not too complex, it may be interesting to
>> test if it is worth.
> 
> I'll try it out tonight

Great!

>> Did you try tweaking with the -p parameter? It can be useful when a
>> measure is "noisy".
> 
> Nope I had not, using -p3 seems to work just as well.

I would have used something like -p100000 or -p1000000, but if -p3 is 
good for you, I'm happy :-)

Ĝis,
m


More information about the gmp-devel mailing list