原理:我们预处理出N^(2/3)以内的素数
然后对于询问,我们可以计算出1-N之内,不能被2-N^(1/3)的质数整除的数字个数。
这个东西我们用f[i][j]表示,则有f[i][j]=f[i][j-1]-f[i/pri[j]][j-1]且f[i][0]=i;
同时有f[i][j]=max(0,(1-i)质数个数-j+1)
然后我们预处理出i<=100000,j<=70的f数组,剩下直接递归
然后我们+2-N^(1/3)的质数个数-1,称之为伪素数。
以发现此时仍有合数,但一定是两个大于N^(1/3)次的素数相乘。
我们枚举较小的素数,可以计算出较大素数范围。
然后剩下的就是真素数了。