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