summaryrefslogtreecommitdiff
path: root/mini-gmp
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2012-02-29 16:29:05 +0100
committerNiels Möller <nisse@lysator.liu.se>2012-02-29 16:29:05 +0100
commit402e80eda7a7008411ac9d0e0bfaa227e01ea207 (patch)
treeaf8d96aa8814a75fb097ebdf0f62003c26d2ea91 /mini-gmp
parentfdc2929eb49ef333140a09437a1cf522c514858b (diff)
downloadgmp-402e80eda7a7008411ac9d0e0bfaa227e01ea207.tar.gz
mini-gmp: New function mpz_pow_ui.
Diffstat (limited to 'mini-gmp')
-rw-r--r--mini-gmp/mini-gmp.c20
-rw-r--r--mini-gmp/mini-gmp.h1
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);