summaryrefslogtreecommitdiff
path: root/mpz/mfac_uiui.c
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2012-05-02 14:13:11 +0200
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2012-05-02 14:13:11 +0200
commit05090c717109dd5559231f9f1802ea34effb8aee (patch)
treecce42e8ae40afbe8a98a40a9690aae00c4326a9b /mpz/mfac_uiui.c
parentf2e88ecb89dc74f81397757e035dbea0387b83e1 (diff)
downloadgmp-05090c717109dd5559231f9f1802ea34effb8aee.tar.gz
c_uiui.c: Support limb != ui.
Diffstat (limited to 'mpz/mfac_uiui.c')
-rw-r--r--mpz/mfac_uiui.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/mpz/mfac_uiui.c b/mpz/mfac_uiui.c
index bfaba7ac2..da392ab7f 100644
--- a/mpz/mfac_uiui.c
+++ b/mpz/mfac_uiui.c
@@ -54,7 +54,8 @@ mpz_mfac_uiui (mpz_ptr x, unsigned long n, unsigned long m)
mp_limb_t g, sn;
mpz_t t;
- g = mpn_gcd_1 (&n, 1, m);
+ sn = n;
+ g = mpn_gcd_1 (&sn, 1, m);
if (g != 1) { n/=g; m/=g; }
if (m <= 2) { /* fac or 2fac */
@@ -63,18 +64,22 @@ mpz_mfac_uiui (mpz_ptr x, unsigned long n, unsigned long m)
mpz_init (t);
mpz_fac_ui (t, n);
sn = n;
- } else if (g == 2) {
- mpz_2fac_ui (x, n << 1);
- g = 1;
- } else
- mpz_fac_ui (x, n);
+ } else {
+ if (g == 2)
+ mpz_2fac_ui (x, n << 1);
+ else
+ mpz_fac_ui (x, n);
+ return;
+ }
} else { /* m == 2 */
if (g != 1) {
mpz_init (t);
mpz_2fac_ui (t, n);
sn = n / 2 + 1;
- } else
+ } else {
mpz_2fac_ui (x, n);
+ return;
+ }
}
} else { /* m >= 3, gcd(n,m) = 1 */
mp_limb_t *factors;