代码如下:
#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
vector <int>ss;
const int N=1e7+10;
vector<int> f(N+1,1);
int ans[N];
vector<int> Prime;
void sieve()
{
for (int i = 2; i<= N/2; i++)
{
if(f[i]==1)
{
Prime.push_back(i);
for (auto j:Prime)
{
if(i*j>N) break;
f[i*j] = 0;
}
}
else
for (auto j:Prime)
{
if(i*j>N) break;
f[i*j] = 0;
if(i%j==0) break;
}
}
}
int main()
{
int t;
sieve();
for(int i=2;i<N;i++)
{
if(f[i]==1) f[i]=1;
else if(i%2==1) f[i]=2+(f[i-2]!=1);
else f[i]=2;
ans[i]=ans[i-1]+f[i];
}
cin>>t;
while(t>0)
{
int a;
scanf("%d",&a);
printf("%d\n",ans[a]);
t--;
}
return 0;
}