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; }