]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
factor: omit unnecessary divisions by small primes
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 8 Jun 2025 18:34:51 +0000 (11:34 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 10 Jul 2025 00:12:39 +0000 (17:12 -0700)
* src/factor.c (mp_factor_using_division):
When continuing in single precision, don’t divide by primes that
were already cast out in multiple precision.
On my platform this gave a 2.5% speedup when factoring
2**128 + 172261 = 4999 * 68070087401668026297934508388031283,
as W_TYPE_SIZE == 64 and 4999 is the last prime in the primes table.

src/factor.c

index 52209eb7e8a9b83d2e484660780d20de2c6e0ada..fb7c47fd9a8f1317aa40028342088fd9c0fde8da 100644 (file)
@@ -913,7 +913,7 @@ mp_factor_using_division (mpz_t t, struct mp_factors *factors)
       for (m = 0; mpz_divisible_ui_p (t, d); m++)
         {
           mpz_tdiv_q_ui (t, t, d);
-          if (mp_finish_in_single (t, factors))
+          if (mp_finish_up_in_single (t, factors, i, d))
             {
               mp_factor_insert_ui (factors, d, m + 1);
               return;