mooyyu

M6 - 埃氏筛-质数筛

c++11 math

bool ar[maxn >> 1u];

int eratos(const int n) {
	if (n < 2) return 0;
	int ret = (n + 1) >> 1u;
	for (int base = 3, des = n / 3; base <= des; base += 2)
		if (!ar[base >> 1u])
			for (int k = base * 3, step = base << 1u; k <= n; k += step)
				if (!ar[k >> 1u]) ar[k >> 1u] = true, --ret;
	return ret;
}