| Index: gcc/gmp/mpz/pprime_p.c
|
| diff --git a/gcc/gmp/mpz/pprime_p.c b/gcc/gmp/mpz/pprime_p.c
|
| deleted file mode 100644
|
| index 766155fa81591b2a57c7f6a1284f206075d22eb8..0000000000000000000000000000000000000000
|
| --- a/gcc/gmp/mpz/pprime_p.c
|
| +++ /dev/null
|
| @@ -1,154 +0,0 @@
|
| -/* mpz_probab_prime_p --
|
| - An implementation of the probabilistic primality test found in Knuth's
|
| - Seminumerical Algorithms book. If the function mpz_probab_prime_p()
|
| - returns 0 then n is not prime. If it returns 1, then n is 'probably'
|
| - prime. If it returns 2, n is surely prime. The probability of a false
|
| - positive is (1/4)**reps, where reps is the number of internal passes of the
|
| - probabilistic algorithm. Knuth indicates that 25 passes are reasonable.
|
| -
|
| -Copyright 1991, 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2005 Free
|
| -Software Foundation, Inc. Miller-Rabin code contributed by John Amanatides.
|
| -
|
| -This file is part of the GNU MP Library.
|
| -
|
| -The GNU MP Library is free software; you can redistribute it and/or modify
|
| -it under the terms of the GNU Lesser General Public License as published by
|
| -the Free Software Foundation; either version 3 of the License, or (at your
|
| -option) any later version.
|
| -
|
| -The GNU MP Library is distributed in the hope that it will be useful, but
|
| -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
| -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
| -License for more details.
|
| -
|
| -You should have received a copy of the GNU Lesser General Public License
|
| -along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
|
| -
|
| -#include "gmp.h"
|
| -#include "gmp-impl.h"
|
| -#include "longlong.h"
|
| -
|
| -static int isprime __GMP_PROTO ((unsigned long int));
|
| -
|
| -
|
| -/* MPN_MOD_OR_MODEXACT_1_ODD can be used instead of mpn_mod_1 for the trial
|
| - division. It gives a result which is not the actual remainder r but a
|
| - value congruent to r*2^n mod d. Since all the primes being tested are
|
| - odd, r*2^n mod p will be 0 if and only if r mod p is 0. */
|
| -
|
| -int
|
| -mpz_probab_prime_p (mpz_srcptr n, int reps)
|
| -{
|
| - mp_limb_t r;
|
| - mpz_t n2;
|
| -
|
| - /* Handle small and negative n. */
|
| - if (mpz_cmp_ui (n, 1000000L) <= 0)
|
| - {
|
| - int is_prime;
|
| - if (mpz_cmpabs_ui (n, 1000000L) <= 0)
|
| - {
|
| - is_prime = isprime (mpz_get_ui (n));
|
| - return is_prime ? 2 : 0;
|
| - }
|
| - /* Negative number. Negate and fall out. */
|
| - PTR(n2) = PTR(n);
|
| - SIZ(n2) = -SIZ(n);
|
| - n = n2;
|
| - }
|
| -
|
| - /* If n is now even, it is not a prime. */
|
| - if ((mpz_get_ui (n) & 1) == 0)
|
| - return 0;
|
| -
|
| -#if defined (PP)
|
| - /* Check if n has small factors. */
|
| -#if defined (PP_INVERTED)
|
| - r = MPN_MOD_OR_PREINV_MOD_1 (PTR(n), (mp_size_t) SIZ(n), (mp_limb_t) PP,
|
| - (mp_limb_t) PP_INVERTED);
|
| -#else
|
| - r = mpn_mod_1 (PTR(n), (mp_size_t) SIZ(n), (mp_limb_t) PP);
|
| -#endif
|
| - if (r % 3 == 0
|
| -#if BITS_PER_MP_LIMB >= 4
|
| - || r % 5 == 0
|
| -#endif
|
| -#if BITS_PER_MP_LIMB >= 8
|
| - || r % 7 == 0
|
| -#endif
|
| -#if BITS_PER_MP_LIMB >= 16
|
| - || r % 11 == 0 || r % 13 == 0
|
| -#endif
|
| -#if BITS_PER_MP_LIMB >= 32
|
| - || r % 17 == 0 || r % 19 == 0 || r % 23 == 0 || r % 29 == 0
|
| -#endif
|
| -#if BITS_PER_MP_LIMB >= 64
|
| - || r % 31 == 0 || r % 37 == 0 || r % 41 == 0 || r % 43 == 0
|
| - || r % 47 == 0 || r % 53 == 0
|
| -#endif
|
| - )
|
| - {
|
| - return 0;
|
| - }
|
| -#endif /* PP */
|
| -
|
| - /* Do more dividing. We collect small primes, using umul_ppmm, until we
|
| - overflow a single limb. We divide our number by the small primes product,
|
| - and look for factors in the remainder. */
|
| - {
|
| - unsigned long int ln2;
|
| - unsigned long int q;
|
| - mp_limb_t p1, p0, p;
|
| - unsigned int primes[15];
|
| - int nprimes;
|
| -
|
| - nprimes = 0;
|
| - p = 1;
|
| - ln2 = mpz_sizeinbase (n, 2); /* FIXME: tune this limit */
|
| - for (q = PP_FIRST_OMITTED; q < ln2; q += 2)
|
| - {
|
| - if (isprime (q))
|
| - {
|
| - umul_ppmm (p1, p0, p, q);
|
| - if (p1 != 0)
|
| - {
|
| - r = MPN_MOD_OR_MODEXACT_1_ODD (PTR(n), (mp_size_t) SIZ(n), p);
|
| - while (--nprimes >= 0)
|
| - if (r % primes[nprimes] == 0)
|
| - {
|
| - ASSERT_ALWAYS (mpn_mod_1 (PTR(n), (mp_size_t) SIZ(n), (mp_limb_t) primes[nprimes]) == 0);
|
| - return 0;
|
| - }
|
| - p = q;
|
| - nprimes = 0;
|
| - }
|
| - else
|
| - {
|
| - p = p0;
|
| - }
|
| - primes[nprimes++] = q;
|
| - }
|
| - }
|
| - }
|
| -
|
| - /* Perform a number of Miller-Rabin tests. */
|
| - return mpz_millerrabin (n, reps);
|
| -}
|
| -
|
| -static int
|
| -isprime (unsigned long int t)
|
| -{
|
| - unsigned long int q, r, d;
|
| -
|
| - if (t < 3 || (t & 1) == 0)
|
| - return t == 2;
|
| -
|
| - for (d = 3, r = 1; r != 0; d += 2)
|
| - {
|
| - q = t / d;
|
| - r = t - q * d;
|
| - if (q < d)
|
| - return 1;
|
| - }
|
| - return 0;
|
| -}
|
|
|