Accept: 332Submit: 1218
Time Limit: 1000 mSecMemory Limit : 32768 KB
Problem Description
Compute the number of prime numbers in a given interval.
A prime number is an integer p greater than 1 whose only positive divisors are 1 and p.
A prime number is an integer p greater than 1 whose only positive divisors are 1 and p.
Input
The first line contains the number of test cases T (T<=1000).
Each test case contains a single line with two numbers separated by a single space: a and b, 2 <= a <= b <= 1000000.
Each test case contains a single line with two numbers separated by a single space: a and b, 2 <= a <= b <= 1000000.
Output
For each test case output a single line, containing the number of primes between a and b inclusive.
Sample Input
2 2 7 3 1000000
Sample Output
4 78497
//注意范围(1-1000000)
//想不到好的办法, 这样做在Foj运行时间为0.8s左右,,.....
//如果有好的方法的希望留言,,谢谢了
#include<iostream>
#include<cmath>
using namespace std;
const int MAX=1000000;
bool isprime[MAX+1];
int prime[MAX];
int pnum;
void getprime()
{
int i,j;
memset(isprime,0,sizeof(isprime));
pnum=0;
for(i=2;i<=MAX;i++)
{
if(!isprime[i]) prime[pnum++]=i;
for(j=0;j<pnum&&prime[j]*i<=MAX;j++)
{
isprime[prime[j]*i]=1;
if(i%prime[j]==0) break;
}
}
}
int main()
{
int n,a,b,count,i;
getprime();
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
count=0;
scanf("%d%d",&a,&b);
for(i=a;i<=b;i++)
if(isprime[i]==0)
count++;
printf("%d/n",count);
}
}
return 0;
}