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