这么个水题,让我敲了好长时间,,,我就不懂了.为什么能用n/2,而就是不能用sqrt(n)呢
能漏掉什么答案么? 我一定得弄清楚 而且.如果加上while的话,,就错,我也不懂...等会研究清楚继续整
贴出代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
bool hash[40000];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N;
memset(hash,1,sizeof(hash));
scanf("%d",&N);
int t=N;
for(int i=2;i<=t>>1;i++)
{
if(t%i==0)
{
for(int j=i;j<N;j+=i)
hash[j]=0;
}
}
int cnt=0;
for(i=1;i<N;i++)
{
if(hash[i])
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}