#include <iostream> using namespace std; const int x = 1000001;//使用const是因为能用在下面数组 int a[x];//存答案 bool is_prime[x];//数组内表示是不是质数,是质数为1(真)不是则为0(假) int main() { for(int i = 0;i < x;i++) is_prime[i] = true;//先把is_prime数组内的值都设为1(真)再使用埃式筛筛出不是质数的数变为0(假) is_prime[0] = is_prime[1] = false;//0,1不是质数 for(int i = 2;i < x;i++)//埃式筛开始 { if(is_prime[i])//是质数为真if语句触发 { for(int j = 2 * i;j < x;j += i) { is_prime[j] = false;//筛出不是质数的数都变为0(假) } } }//埃式筛完结 for(int i = 2;i < x;i++) { if(is_prime[i])//是质数为真if语句触发 a[i] = a[i - 1] + 1;//统计质数个数方便下面输出 else//表示不是质数 a[i] = a[i - 1];//不是质数质数个数不变 } int T,n;//题目所给变量 cin >> T; while(T--)//T--表示个数越来越少直到为0(假)while循环不触发 { cin >> n; cout << a[n] << endl;//输出答案 } return 0; }