maxint_t P2(maxint_t x, int threads) { if (x < 1) return 0; if (print_status()) set_print_variables(true); double alpha = get_alpha(x, 0.0017154, -0.0508992, 0.483613, 0.0672202); int64_t y = (int64_t) (iroot<3>(x) * alpha); if (x <= numeric_limits<int64_t>::max()) return P2((int64_t) x, y, threads); else return P2(x, y, threads); }
int256_t P2(int128_t x, int threads) { if (x < 1) return 0; double alpha = get_alpha_deleglise_rivat(x); string limit = get_max_x(alpha); if (x > to_int128(limit)) throw primesum_error("P2(x): x must be <= " + limit); if (is_print()) set_print_variables(true); int64_t y = (int64_t) (iroot<3>(x) * alpha); return P2(x, y, threads); }
maxint_t S2_easy(maxint_t x, int threads) { if (x < 1) return 0; if (print_status()) set_print_variables(true); double alpha = get_alpha(x, 0.0017154, -0.0508992, 0.483613, 0.0672202); int64_t y = (int64_t) (iroot<3>(x) * alpha); int64_t z = (int64_t) (x / y); int64_t c = PhiTiny::get_c(y); if (x <= numeric_limits<int64_t>::max()) return S2_easy((int64_t) x, y, z, c, threads); else return S2_easy(x, y, z, c, threads); }
int256_t S2_hard(int128_t x, int threads) { if (x < 1) return 0; double alpha = get_alpha_deleglise_rivat(x); string limit = get_max_x(alpha); if (x > to_int128(limit)) throw primesum_error("S2_hard(x): x must be <= " + limit); if (is_print()) set_print_variables(true); int64_t y = (int64_t) (iroot<3>(x) * alpha); int64_t z = (int64_t) (x / y); int64_t c = PhiTiny::get_c(y); return S2_hard(x, y, z, c, threads); }
maxint_t S2_hard(maxint_t x, int threads) { if (x < 1) return 0; if (print_status()) set_print_variables(true); double alpha = get_alpha(x, 0.0017154, -0.0508992, 0.483613, 0.0672202); int64_t y = (int64_t) (iroot<3>(x) * alpha); int64_t z = (int64_t) (x / y); int64_t c = PhiTiny::get_c(y); // TODO: find better S2_hard approximation formula maxint_t s2_hard_approx = Li(x); if (x <= numeric_limits<int64_t>::max()) return S2_hard((int64_t) x, y, z, c, (int64_t) s2_hard_approx, threads); else return S2_hard(x, y, z, c, s2_hard_approx, threads); }
maxint_t P2(maxint_t x, int threads) { if (x < 1) return 0; double alpha = get_alpha_deleglise_rivat(x); string limit = get_max_x(alpha); if (x > to_maxint(limit)) throw primecount_error("P2(x): x must be <= " + limit); if (is_print()) set_print_variables(true); int64_t y = (int64_t) (iroot<3>(x) * alpha); if (x <= numeric_limits<int64_t>::max()) return P2((int64_t) x, y, threads); else return P2(x, y, threads); }
maxint_t S2_hard(maxint_t x, int threads) { if (x < 1) return 0; double alpha = get_alpha_deleglise_rivat(x); string limit = get_max_x(alpha); if (x > to_maxint(limit)) throw primecount_error("S2_hard(x): x must be <= " + limit); if (is_print()) set_print_variables(true); int64_t y = (int64_t) (iroot<3>(x) * alpha); int64_t z = (int64_t) (x / y); int64_t c = PhiTiny::get_c(y); if (x <= numeric_limits<int64_t>::max()) return S2_hard((int64_t) x, y, z, c, (int64_t) Ri(x), threads); else return S2_hard(x, y, z, c, Ri(x), threads); }