I just started with competitive programming. I am kinda stuck with this prime no. generator problem on SPOJ. Code works fine on GeeksforGeeks IDE but on SPOJ it gives a runtime error. The question goes like this:
Peter 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 input begins with the number t of test cases in a single line (t<=10). In each of the next t lines there are 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, test cases separated by an empty line.
Example
Input:
2
1 10
3 5
Output:
2
3
5
7
3
5
and my solution is this:
# include<iostream>
# include <math.h>
using namespace std;
int main() {
int t;
cin>>t;
while(t--){
int up,low;
cin>>low>>up;
int len = 1000000;
bool arr[len];
arr[1]=arr[0]=false;
for(int i=2;i<=up;i++)
arr[i]=true;
for(int i=2;i<sqrt(up);i++) {
if(arr[i]==true){
for(int j=(i*i);j<=up;j+=i){
arr[j]=false;
}
}
}
for(int i=low;i<=up;i++)
{
if(arr[i]==true)
cout<<i<<endl;
}
if(t==1)
cout<<endl;
}
return 0;
}
I have used Sieve of Eratosthenes to solve this problem.