Re: parforstep() available, but parsumstep() is missing
"Ruud H.G. van Tol" <[email protected]> Wed, 7 Jan 2026 21:50:23 +0100
| Newsgroups | gmane.comp.mathematics.pari.user |
|---|---|
| Message-ID | <[email protected]> |
On 2026-01-07 20:31, [email protected] wrote: > [...] parsum(k=1,10^9,isprime(k^2+(k+1)^2)) is fast, but tests too > much values of k. For values k=1 (mod 5) and k=3 (mod 5) the term > k^2+(k+1)^2 is divisible by 5, so no isprime() test needed. The > equivalent computation (+1 needed since 5=1^2+2^2 needs to be counted > as prime) would be this, and should reduce runtime by 40%: > > { > 1 > + parsumstep(k=5,10^9,5,isprime(k^2+(k+1)^2)) > + parsumstep(k=2,10^9,5,isprime(k^2+(k+1)^2)) > + parsumstep(k=4,10^9,5,isprime(k^2+(k+1)^2)) > } [...] Common workarounds indeed are slower: ? 1 + parsum(n=1,10^7, my(k=n\3*5+[0, 2, 4][n%3+1]); isprime(k^2+(k+1)^2)) cpu time = 11,876 ms, real time = 1,345 ms. %1 = 1439667 ? 1 + parsum(k=1,10^8\6, k%5%2 && next; isprime(k^2+(k+1)^2)) cpu time = 9,656 ms, real time = 1,104 ms. %2 = 1439667 ? parsum(k=1,10^8\6, isprime(k^2+(k+1)^2)) cpu time = 8,943 ms, real time = 1,020 ms. %3 = 1439667 -- Ruud