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

京公网安备 11010502036488号