summaryrefslogtreecommitdiff
path: root/mpz/fac_ui.c
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2012-04-30 16:02:11 +0200
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2012-04-30 16:02:11 +0200
commit7534012a4efa3d7f269891b7614b212398914e9d (patch)
treee3f06b9eb059936fe2ddf1c5ab9c79e17e0fe1bb /mpz/fac_ui.c
parent78d7dd516a6121a5323cda6c79b8736e9d16774e (diff)
downloadgmp-7534012a4efa3d7f269891b7614b212398914e9d.tar.gz
Share precomputed (n-popcount(n)).
Diffstat (limited to 'mpz/fac_ui.c')
-rw-r--r--mpz/fac_ui.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/mpz/fac_ui.c b/mpz/fac_ui.c
index 998327b24..bb7a9c440 100644
--- a/mpz/fac_ui.c
+++ b/mpz/fac_ui.c
@@ -83,8 +83,14 @@ mpz_fac_ui (mpz_ptr x, unsigned long n)
{
mp_limb_t count;
mpz_oddfac_1 (x, n, 0);
- popc_limb (count, n);
- mpz_mul_2exp (x, x, n - count);
+ if (n <= TABLE_LIMIT_2N_MINUS_POPC_2N)
+ count = __gmp_fac2cnt_table[n / 2 - 1];
+ else
+ {
+ popc_limb (count, n);
+ count = n - count;
+ }
+ mpz_mul_2exp (x, x, count);
}
}