/* Copyright (C) 2015 Kushagra Singh This file is part of FLINT. FLINT is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License (LGPL) as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. See . */ #include #include "flint.h" #include "ulong_extras.h" int main(void) { mp_limb_t prime1, prime2, primeprod, fac, modval; int i, j, k, l, fails; FLINT_TEST_INIT(state); fails = 0; flint_printf("factor_pollard_brent...."); fflush(stdout); for (l = 5; l < 26; l += 5) { for (i = l; i < 26 && i + l <= FLINT_BITS; i += 5) { for (j = 0; j < 10 * flint_test_multiplier(); j++) { do { prime1 = n_randtest_bits(state, l); prime2 = n_randtest_bits(state, i); primeprod = prime1 * prime2; } while (primeprod < 1); k = n_factor_pollard_brent(&fac, state, primeprod, 5, 2500); if (k == 0) fails += 1; else { modval = primeprod % fac; if (modval != 0) { flint_printf("FAIL : Wrong factor calculated\n"); flint_printf("n : %wu\n", primeprod); flint_printf("Factor calculated: %wn\n", fac); abort(); } } } } } #if FLINT64 if (fails > flint_test_multiplier()) #else if (fails > 2 * flint_test_multiplier()) #endif { printf("FAIL : Pollard Rho - Brent failed too many times (%d times)\n", fails); abort(); } FLINT_TEST_CLEANUP(state); flint_printf("PASS\n"); return 0; }