Shridhar wants to generate some prime numbers for his cryptosystem.
Help him! Your task is to generate all prime numbers between two given
numbers. Input The first line contains t, the number of test cases
(less then or equal to 10). Followed by t lines which contain two
numbers m and n (1 <= m <= n <= 1000000000, n-m<=100000) separated by
a space. Output For every test case print all prime numbers p such
that m <= p <= n, one number per line. Separate the answers for each
test case by an empty line. Example Input:
2
1 10
3 5Output:
2
3
5
73
5
CODE
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double PI=acos(-1);
const int N=32000;
int isNotPrime[N] = {1, 1};
int prim[N] = {0},num_prime = 0;
int prime(){
for(int i = 2 ; i < N ; i ++)
{
if(! isNotPrime[i])
prim[num_prime++]=i;
for(long j = 0 ; j < num_prime && i * prim[j] < N ; j ++)
{
isNotPrime[i * prim[j]] = 1;
if( !(i % prim[j] ) )
break;
}
}
return num_prime;
}
bool check(LL x){
LL len=sqrt(x);
for(LL i=0;prim[i]<=len;i++){
if(x%prim[i]==0)
return false;
}
return true;
}
int n;
LL a,b;
int main()
{
int len=prime();
cin>>n;
while(n--){
cin>>a>>b;
for(LL i=a;i<=b;i++){
if(i>=N){
if(check(i))
cout<<i<<endl;
}
else if(!isNotPrime[i]){
cout<<i<<endl;
}
}
if(n)
cout<<endl;
}
return 0;
}