diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2012-04-30 16:02:11 +0200 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2012-04-30 16:02:11 +0200 |
commit | 7534012a4efa3d7f269891b7614b212398914e9d (patch) | |
tree | e3f06b9eb059936fe2ddf1c5ab9c79e17e0fe1bb /mpz/fac_ui.c | |
parent | 78d7dd516a6121a5323cda6c79b8736e9d16774e (diff) | |
download | gmp-7534012a4efa3d7f269891b7614b212398914e9d.tar.gz |
Share precomputed (n-popcount(n)).
Diffstat (limited to 'mpz/fac_ui.c')
-rw-r--r-- | mpz/fac_ui.c | 10 |
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); } } |