int factor_pollard_rho_method(const Ptr<RCP<const Integer>> &f, const Integer &n, unsigned retries) { int ret_val = 0; mpz_class rop, nm1, nm4, a, s; gmp_randstate_t state; gmp_randinit_default(state); gmp_randseed_ui(state, retries); nm1 = n.as_mpz() - 1; nm4 = n.as_mpz() - 4; for (unsigned i = 0; i < retries && ret_val == 0; i++) { mpz_urandomm(a.get_mpz_t(), state, nm1.get_mpz_t()); mpz_urandomm(s.get_mpz_t(), state, nm4.get_mpz_t()); s = s + 1; ret_val = _factor_pollard_rho_method(rop, n.as_mpz(), a, s); } if (ret_val != 0) *f = integer(rop); return ret_val; }
int factor_pollard_rho_method(const Ptr<RCP<const Integer>> &f, const Integer &n, unsigned retries) { int ret_val = 0; integer_class rop, nm1, nm4, a, s; gmp_randstate_t state; gmp_randinit_default(state); gmp_randseed_ui(state, retries); nm1 = n.as_integer_class() - 1; nm4 = n.as_integer_class() - 4; for (unsigned i = 0; i < retries and ret_val == 0; ++i) { mp_urandomm(a, state, nm1); mp_urandomm(s, state, nm4); s = s + 1; ret_val = _factor_pollard_rho_method(rop, n.as_integer_class(), a, s); } if (ret_val != 0) *f = integer(std::move(rop)); gmp_randclear(state); return ret_val; }