刚开始把flag放在循环外面了,因此还是出错,后来知道要让flag重置为1,要放在里面。
using namespace std;
#define int long long
#define endl '\n'
signed main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t,n,sum=0;
int a[1000001]={0};//用数组来存放N之前的质数
for(int i=2;i<=1000000;i++){
int flag=1;//注意这里不能放循环外面,因为在每次检查数字之前,要把flag重置为1
for(int j=2;j<=sqrt(i);j++){
if(i%j==0)
{
flag=0;//说明不是质数
break;
}
}
if(flag==1)
sum++;//说明是质数,+1
a[i]=sum;//记录在i之内有多少个质数
}
cin>>t;
while(t--){
cin>>n;
cout<<a[n]<<endl;
}
return 0;
}