diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2012-05-02 14:13:11 +0200 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2012-05-02 14:13:11 +0200 |
commit | 05090c717109dd5559231f9f1802ea34effb8aee (patch) | |
tree | cce42e8ae40afbe8a98a40a9690aae00c4326a9b /mpz/mfac_uiui.c | |
parent | f2e88ecb89dc74f81397757e035dbea0387b83e1 (diff) | |
download | gmp-05090c717109dd5559231f9f1802ea34effb8aee.tar.gz |
c_uiui.c: Support limb != ui.
Diffstat (limited to 'mpz/mfac_uiui.c')
-rw-r--r-- | mpz/mfac_uiui.c | 19 |
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; |