diff options
author | Niels Möller <nisse@lysator.liu.se> | 2012-02-29 16:29:05 +0100 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2012-02-29 16:29:05 +0100 |
commit | 402e80eda7a7008411ac9d0e0bfaa227e01ea207 (patch) | |
tree | af8d96aa8814a75fb097ebdf0f62003c26d2ea91 /mini-gmp | |
parent | fdc2929eb49ef333140a09437a1cf522c514858b (diff) | |
download | gmp-402e80eda7a7008411ac9d0e0bfaa227e01ea207.tar.gz |
mini-gmp: New function mpz_pow_ui.
Diffstat (limited to 'mini-gmp')
-rw-r--r-- | mini-gmp/mini-gmp.c | 20 | ||||
-rw-r--r-- | mini-gmp/mini-gmp.h | 1 |
2 files changed, 17 insertions, 4 deletions
diff --git a/mini-gmp/mini-gmp.c b/mini-gmp/mini-gmp.c index e0eb3bad9..67b00b999 100644 --- a/mini-gmp/mini-gmp.c +++ b/mini-gmp/mini-gmp.c @@ -3007,17 +3007,29 @@ mpz_sqrt (mpz_t s, const mpz_t u) } void -mpz_ui_pow_ui (mpz_t r, unsigned long b, unsigned long e) +mpz_pow_ui (mpz_t r, const mpz_t b, unsigned long e) { unsigned long bit; - mpz_set_ui (r, 1); + mpz_t tr; + mpz_init_set_ui (tr, 1); for (bit = GMP_ULONG_HIGHBIT; bit > 0; bit >>= 1) { - mpz_mul (r, r, r); + mpz_mul (tr, tr, tr); if (e & bit) - mpz_mul_ui (r, r, b); + mpz_mul (tr, tr, b); } + mpz_swap (r, tr); + mpz_clear (tr); +} + +void +mpz_ui_pow_ui (mpz_t r, unsigned long blimb, unsigned long e) +{ + mpz_t b; + mpz_init_set_ui (b, blimb); + mpz_pow_ui (r, b, e); + mpz_clear (b); } void diff --git a/mini-gmp/mini-gmp.h b/mini-gmp/mini-gmp.h index bc9197cee..38402e72e 100644 --- a/mini-gmp/mini-gmp.h +++ b/mini-gmp/mini-gmp.h @@ -172,6 +172,7 @@ int mpz_invert (mpz_t, const mpz_t, const mpz_t); void mpz_sqrtrem (mpz_t, mpz_t, const mpz_t); void mpz_sqrt (mpz_t, const mpz_t); +void mpz_pow_ui (mpz_t, const mpz_t, unsigned long); void mpz_ui_pow_ui (mpz_t, unsigned long, unsigned long); void mpz_powm (mpz_t, const mpz_t, const mpz_t, const mpz_t); void mpz_powm_ui (mpz_t, const mpz_t, unsigned long, const mpz_t); |