diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2013-01-11 10:27:53 +0100 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2013-01-11 10:27:53 +0100 |
commit | 0917fd20ff03a90f44f0f41fc29513c027342565 (patch) | |
tree | 979193e6c31536c1ab719e2968dc6fd36a1834bb /mini-gmp | |
parent | d120c9d796f45a98e988f318d322e4c71b96bd1f (diff) | |
download | gmp-0917fd20ff03a90f44f0f41fc29513c027342565.tar.gz |
Reverted non-bugfix improvements to mini-gmp, keep them for the next release.
Diffstat (limited to 'mini-gmp')
-rw-r--r-- | mini-gmp/mini-gmp.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/mini-gmp/mini-gmp.c b/mini-gmp/mini-gmp.c index e72655e2c..fff52c287 100644 --- a/mini-gmp/mini-gmp.c +++ b/mini-gmp/mini-gmp.c @@ -3184,26 +3184,29 @@ mpz_sqrt (mpz_t s, const mpz_t u) void mpz_fac_ui (mpz_t x, unsigned long n) { - mpz_set_ui (x, n + (n == 0)); - for (;n > 2;) - mpz_mul_ui (x, x, --n); + if (n < 2) { + mpz_set_ui (x, 1); + return; + } + mpz_set_ui (x, n); + for (;--n > 1;) + mpz_mul_ui (x, x, n); } void mpz_bin_uiui (mpz_t r, unsigned long n, unsigned long k) { mpz_t t; - mpz_set_ui (r, k <= n); - - if (k > (n >> 1)) - k = (k <= n) ? n - k : 0; + if (k > n) { + r->_mp_size = 0; + return; + } + mpz_fac_ui (r, n); mpz_init (t); mpz_fac_ui (t, k); - - for (; k > 0; k--) - mpz_mul_ui (r, r, n--); - + mpz_divexact (r, r, t); + mpz_fac_ui (t, n - k); mpz_divexact (r, r, t); mpz_clear (t); } |