一道ACM练习题 提交一直cr 有高手做过的 指导下 怎样可以通过
/*
Description
给定两个非负整数a,b,其中1<= a,b<=1,000,000,请计算这两个数之间有多少个素数。
输入
第一行是一个整数K(1<=K<=1000),表示有多少个样例,每个样例占一行,是两个整数a和b,
每个整数之间用一个空格隔开。
输出
每行输出一个样例的结果。
Sample Input
2
2 3
17 19
Sample Output
2
2
*/
#include<stdio.h>
#include<math.h>
int main(void)
{
int cases;
long a,b,i,j,c,count;
bool flag[2000000];
flag[0] = true;
for(i=1;i<2000000;i++)
{
if(i <= 3)
{
flag[i] = true;
continue;
}
if(0 == i % 2)
{
flag[i] = false;
continue;
}
c = (long)sqrtl((long double)i);
for(j=2;j<=c;j++)
{
if(0 == i % j)
{
flag[i] = false;
break;
}
if(c == j)
{
flag[i] = true;
break;
}
}
}
scanf("%d",&cases);
while(cases--)
{
count = 0;
scanf("%ld%ld",&a,&b);
for(i=a;i<=b;i++)
{
if(flag[i])
{
count++;
}
}
printf("%ld\n",count);
}
return 0;
}