对于每一个n,其实只需要统计1~n有多少个素数就可以了
先预处理,然后对于每次询问直接输出即可
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string.h>
#include<queue>
#include<stack>
#include<list>
#include<map>
#include<set>
#include<vector>
using namespace std;
typedef long long int ll;
const int maxn =1e6+5;
const int maxm=10000;
const int mod =1e9+7;
const int INF=0x3f3f3f3f;
const double eps=1e-8;
int prime[maxn];
bool solve(int a)
{
for(int i=2;i<=sqrt(a);i++)
if(a%i==0)return false;
return true;
}
void init()
{
for(int i=1;i<=1e6;i++)
{
if(solve(i))prime[i]=1;
prime[i]+=prime[i-1];
}
}
int main()
{
init();
int t;scanf("%d",&t);
while(t--)
{
int n;scanf("%d",&n);
printf("%d\n",prime[n]-1);
}
return 0;
}