刚开始把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;
}