#include <primecount-internal.hpp>
#include <imath.hpp>
#include <print.hpp>
#include <stdint.h>
namespace primecount {
int64_t pi_meissel(int64_t x,
int threads,
bool is_print)
{
if (x < 2)
return 0;
int64_t y = iroot<3>(x);
int64_t a = pi_noprint(y, threads);
if (is_print)
{
print("");
print("=== pi_meissel(x) ===");
print("pi(x) = phi(x, a) + a - 1 - P2");
print("x", x);
print("y", y);
print("a", a);
print("threads", threads);
}
int64_t phi_xa = phi(x, a, threads, is_print);
int64_t p2 = P2(x, y, threads, is_print);
int64_t sum = phi_xa + a - 1 - p2;
return sum;
}
}