1.为了避免重复运算,先求出一个质数表,在根据输入的数字查
2.注意建立数组的时候需要的数要足够大,我一开始用arr[100001],一直显示错误
3.判断质数这里,用sqrt,减少运算时间,防止超时
4.最后循环的时候用while更加简洁一点,不要总是想着用for

#include<stdio.h>
#include<math.h>
int main()
{
    int t,n,i,j;
    int arr[1000001] = {0};
    int ret,cnt;
    for (i=2;i<1000001;i++) {
        ret=1;
        for (j=2;j<=sqrt(i);j++) {
            if ( i%j == 0 ) {
                ret=0;
                break;
            }
        }
        if (ret) {
            cnt++;
        }
        arr[i]=cnt;
    }
    
    scanf ("%d",&t);
    while (t--) {
        scanf("%d",&n);
        printf("%d\n",arr[n]);
    }
    return 0;
}