#include<iostream>
#include<cmath>
#define diff 100000
#define sq 1000000000
int prime[diff];
int myprime[diff];
using namespace std;
int main()
{
long long int m,n,i,j,q,s,r,w,p;
int t,range;
r=0;
for(i=2;i<=sqrt(sq);i++) //marking all prime numbers upto sqrt(10^9)
{
prime[i]=1;
}
for(i=2;i<=sqrt(sq);i++) //marking all non-prime upto sqrt(10^9)
{
if(prime[i]==1)
{
for(j=2;i*j<=sqrt(sq);j++)
{
prime[i*j]=0;
}
}
}
for(i=2;i<=sqrt(sq);i++) //Storing all prime number upto sqrt(10^9) in array
{
if(prime[i]==1)
{
myprime[r]=i;
r++;
}
}
cin>>t;
while(t--)
{
cin>>m>>n;
range=floor(sqrt(((double)n)));
prime[0]=0;
prime[1]=0;
for(i=0;i<r;i++) //marking all prime in the range
{
w=m/myprime[i];
w=w*myprime[i];
p=myprime[i];
// The following code is incorrect as I am unable to derive out the logic to mark the multiples in the range
for(j=w;j<=n;j=j+p) //j+2<n
{
prime[j+p]=0;
}
}
for(i=m;i<=n;i++)
{
if(prime[i]==1)
{
cout<<i<<"\n";
}
}
cout<<"\n";
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNtYXRoPgojZGVmaW5lIGRpZmYgMTAwMDAwCiNkZWZpbmUgc3EgICAxMDAwMDAwMDAwCmludCBwcmltZVtkaWZmXTsKaW50IG15cHJpbWVbZGlmZl07CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgogICBpbnQgbWFpbigpCiAgICB7CiAgICBsb25nIGxvbmcgaW50IG0sbixpLGoscSxzLHIsdyxwOwogICAgaW50IHQscmFuZ2U7CiAgICAgIHI9MDsKICAgICAgZm9yKGk9MjtpPD1zcXJ0KHNxKTtpKyspICAvL21hcmtpbmcgYWxsIHByaW1lIG51bWJlcnMgdXB0byBzcXJ0KDEwXjkpCiAgICAgICAgICAgewogICAgICAgICAgICAgICBwcmltZVtpXT0xOwogICAgICAgICAgIH0KICAgICAgZm9yKGk9MjtpPD1zcXJ0KHNxKTtpKyspICAgLy9tYXJraW5nIGFsbCBub24tcHJpbWUgdXB0byBzcXJ0KDEwXjkpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmKHByaW1lW2ldPT0xKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3Ioaj0yO2kqajw9c3FydChzcSk7aisrKQogICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHByaW1lW2kqal09MDsKICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgfQoKICAgICAgICBmb3IoaT0yO2k8PXNxcnQoc3EpO2krKykgICAgLy9TdG9yaW5nIGFsbCBwcmltZSBudW1iZXIgdXB0byBzcXJ0KDEwXjkpIGluIGFycmF5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZihwcmltZVtpXT09MSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBteXByaW1lW3JdPWk7CiAgICAgICAgICAgICAgICAgcisrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICBjaW4+PnQ7CiAgICAgICB3aGlsZSh0LS0pCiAgICAgICAgIHsKICAgICAgICAgICBjaW4+Pm0+Pm47CiAgICAgICAgICAgcmFuZ2U9Zmxvb3Ioc3FydCgoKGRvdWJsZSluKSkpOwogICAgICAgICAgIHByaW1lWzBdPTA7CiAgICAgICAgICAgcHJpbWVbMV09MDsKICAgICAgICAgICAgZm9yKGk9MDtpPHI7aSsrKSAgIC8vbWFya2luZyBhbGwgcHJpbWUgaW4gdGhlIHJhbmdlCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICB3PW0vbXlwcmltZVtpXTsKICAgICAgICAgICAgICAgdz13Km15cHJpbWVbaV07CiAgICAgICAgICAgICAgIHA9bXlwcmltZVtpXTsKLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGluY29ycmVjdCBhcyBJIGFtIHVuYWJsZSB0byBkZXJpdmUgb3V0IHRoZSBsb2dpYyB0byBtYXJrIHRoZSBtdWx0aXBsZXMgaW4gdGhlIHJhbmdlCgogICAgICAgICAgICAgICBmb3Ioaj13O2o8PW47aj1qK3ApICAgLy9qKzI8bgogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBwcmltZVtqK3BdPTA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQoKICAgICAgICAgICBmb3IoaT1tO2k8PW47aSsrKQogICAgICAgICAgIHsKICAgICAgICAgICAgICAgaWYocHJpbWVbaV09PTEpCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIGNvdXQ8PGk8PCJcbiI7CgogICAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgIGNvdXQ8PCJcbiI7CiAgICAgICAgfQogICAgIHJldHVybiAwOwogICAgfQo=