#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
using namespace std;
/* Implementing Segmented Sieve of Eratosthenes
* Segmented sieve of Eratosthenes used to find primes in range [a, b]
*
* Steps
* 1- find all the primes up to sqrt(b), call them primes[]
* 2- create a boolean array is_prime[] with length = b-a+1 and fill it with true
* 3- for each p in primes set is_prime[i*p - a] = false starting at i=ceil(a/p)
* 4- for each is_prime[i]=true print i+a
*
*/
/* ************** Implementation of Sieve of Eratosthenes ************** */
void sieve(ull start, ull stop)
{
int range;
range=(int)sqrt(stop);
bool arr[range+1];
memset(arr, true, sizeof(arr));
int i,j;
int x;
for(i=2;i<=(int)sqrt(range);i++)
{
if(arr[i])
{
j=2;
while((x=i*j) <= range)
{
arr[x]=false;
j++;
}
}
}
vector<int> primes;
int cnt=0;
for(i=2;i<=range;i++)
{
if(arr[i])
{
primes.push_back(i);
cnt++;
//cout<<i<<" ";
}
}
/* Printing Primes
cout<<"[ ";
for(i=0;i<cnt;i++)
{
cout<<primes[i]<<", ";
}cout<<"]\n";
*/
//For segmented SIeve
int siz=stop-start+1;
bool isprime[siz];
memset(isprime, true, sizeof(isprime));
int index;
for(i=0;i<cnt;i++)
{
index=(ceil)((float)start/(float)primes[i]);
index=(int)index;
isprime[(index*primes[i])-start]=false;
//cout<<(index*primes[i])-start<<endl;
}
for(i=0;i<siz;i++)
{
//cout<<isprime[i]<<" ";
if(isprime[i])
cout<<i+start<<endl;
}
}/* **********************Segmented Sieve of Eratosthenes ************************** */
int main()
{
int t;
cin>>t;
while(t--)
{
int start, stop;
cin>>start>>stop;
sieve(start, stop);
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCi8qICBJbXBsZW1lbnRpbmcgU2VnbWVudGVkIFNpZXZlIG9mIEVyYXRvc3RoZW5lcwoKKiAgIFNlZ21lbnRlZCBzaWV2ZSBvZiBFcmF0b3N0aGVuZXMgdXNlZCB0byBmaW5kIHByaW1lcyBpbiByYW5nZSBbYSwgYl0KKgoqICAgU3RlcHMKKiAgIDEtIGZpbmQgYWxsIHRoZSBwcmltZXMgdXAgdG8gc3FydChiKSwgY2FsbCB0aGVtIHByaW1lc1tdCiogICAyLSBjcmVhdGUgYSBib29sZWFuIGFycmF5IGlzX3ByaW1lW10gd2l0aCBsZW5ndGggPSBiLWErMSBhbmQgZmlsbCBpdCB3aXRoIHRydWUKKiAgIDMtIGZvciBlYWNoIHAgaW4gcHJpbWVzIHNldCBpc19wcmltZVtpKnAgLSBhXSA9IGZhbHNlIHN0YXJ0aW5nIGF0IGk9Y2VpbChhL3ApCiogICA0LSBmb3IgZWFjaCBpc19wcmltZVtpXT10cnVlIHByaW50IGkrYQoqCiovCgovKiAqKioqKioqKioqKioqKiBJbXBsZW1lbnRhdGlvbiBvZiBTaWV2ZSBvZiBFcmF0b3N0aGVuZXMgKioqKioqKioqKioqKiogKi8Kdm9pZCBzaWV2ZSh1bGwgc3RhcnQsIHVsbCBzdG9wKQp7CiAgICBpbnQgcmFuZ2U7CiAgICByYW5nZT0oaW50KXNxcnQoc3RvcCk7CiAgICBib29sIGFycltyYW5nZSsxXTsKICAgIG1lbXNldChhcnIsIHRydWUsIHNpemVvZihhcnIpKTsKICAgIGludCBpLGo7CiAgICBpbnQgeDsKCiAgICBmb3IoaT0yO2k8PShpbnQpc3FydChyYW5nZSk7aSsrKQogICAgewogICAgICAgIGlmKGFycltpXSkKICAgICAgICB7CiAgICAgICAgICAgIGo9MjsKICAgICAgICAgICAgd2hpbGUoKHg9aSpqKSA8PSByYW5nZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYXJyW3hdPWZhbHNlOwogICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHZlY3RvcjxpbnQ+IHByaW1lczsKICAgIGludCBjbnQ9MDsKCiAgICBmb3IoaT0yO2k8PXJhbmdlO2krKykKICAgIHsKICAgICAgICBpZihhcnJbaV0pCiAgICAgICAgewogICAgICAgICAgICBwcmltZXMucHVzaF9iYWNrKGkpOwogICAgICAgICAgICBjbnQrKzsKICAgICAgICAgICAgLy9jb3V0PDxpPDwiICI7CiAgICAgICAgfQogICAgfQoKICAgIC8qIFByaW50aW5nIFByaW1lcwoKICAgIGNvdXQ8PCJbICI7CiAgICBmb3IoaT0wO2k8Y250O2krKykKICAgIHsKICAgICAgICBjb3V0PDxwcmltZXNbaV08PCIsICI7CiAgICB9Y291dDw8Il1cbiI7CiAgICAqLwoKICAgIC8vRm9yIHNlZ21lbnRlZCBTSWV2ZQogICAgaW50IHNpej1zdG9wLXN0YXJ0KzE7CiAgICBib29sIGlzcHJpbWVbc2l6XTsKICAgIG1lbXNldChpc3ByaW1lLCB0cnVlLCBzaXplb2YoaXNwcmltZSkpOwogICAgaW50IGluZGV4OwoKICAgIGZvcihpPTA7aTxjbnQ7aSsrKQogICAgewogICAgICAgIGluZGV4PShjZWlsKSgoZmxvYXQpc3RhcnQvKGZsb2F0KXByaW1lc1tpXSk7CiAgICAgICAgaW5kZXg9KGludClpbmRleDsKICAgICAgICBpc3ByaW1lWyhpbmRleCpwcmltZXNbaV0pLXN0YXJ0XT1mYWxzZTsKICAgICAgICAvL2NvdXQ8PChpbmRleCpwcmltZXNbaV0pLXN0YXJ0PDxlbmRsOwogICAgfQoKICAgIGZvcihpPTA7aTxzaXo7aSsrKQogICAgewogICAgICAgIC8vY291dDw8aXNwcmltZVtpXTw8IiAiOwogICAgICAgIGlmKGlzcHJpbWVbaV0pCiAgICAgICAgICAgIGNvdXQ8PGkrc3RhcnQ8PGVuZGw7CiAgICB9Cgp9LyogKioqKioqKioqKioqKioqKioqKioqKlNlZ21lbnRlZCBTaWV2ZSBvZiBFcmF0b3N0aGVuZXMgKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KCgoKaW50IG1haW4oKQp7CiAgICBpbnQgdDsKICAgIGNpbj4+dDsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgICAgICBpbnQgc3RhcnQsIHN0b3A7CiAgICAgICAgY2luPj5zdGFydD4+c3RvcDsKICAgICAgICBzaWV2ZShzdGFydCwgc3RvcCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K