#include <iostream>
using namespace std;
typedef struct Link
{
int val;
struct Link * nxt;
} Link;
void printPrime( int m,int n) ;
void addList( int val) ;
int nxtPrime( int old) ;
Link * head = new Link;
void PrintLink( )
{
Link * t = head;
cout << "PRINT LINK" ;
while ( t! = NULL )
{
cout << "VAL = " << t- > val<< endl;
t= t- > nxt;
}
}
int main( )
{
int t,m,n;
//cout<<"enter T: "<<endl;
cin >> t;
head - > val = 2 ;
head- > nxt = NULL ;
for ( int i= 0 ; i< t; i++ )
{
//cout<<"enter m n: "<<endl;
cin >> m>> n;
//m-n prime num
printPrime( m,n) ;
//check:=
/*for(int j=2;j<m;j++)
{
cout<<"Nxt Prime : "<<nxtPrime(j)<<endl;
}*/
cout << endl;
}
return 0 ;
}
void printPrime( int m,int n)
{
if ( m<= 2 ) {
//cout<<"Prime Found: "<<m<<endl;
m= 3 ;
//return;
}
if ( m% 2 == 0 )
m++ ;
for ( int i= m; i<= n; i= i+ 2 )
{
bool flag = true ;
//cout<<"Value to be checked: "<<i<<endl;
Link * p = head;
int div = p- > val;
while ( ( div * div <= i) && ( p- > nxt ! = NULL ) )
{
//cout<<"div == "<< p->val <<endl;
if ( i% p- > val == 0 )
{
flag = false ;
break ;
}
p = p- > nxt;
div = p- > val;
}
while ( ( div * div <= i) && ( flag== true ) )
{
//cout<<"Add list div == "<< div <<endl;
if ( i% div == 0 )
{
flag = false ;
break ;
}
div = nxtPrime( div ) ;
Link * q = new Link;
q- > val = div ;
q- > nxt = NULL ;
p- > nxt = q;
p= p- > nxt;
}
if ( flag)
cout << "Prime FOund: " << i<< endl;
}
}
int nxtPrime( int old)
{
Link * p ;
bool flag = true ;
if ( old == 2 )
old++ ;
else
old+ = 2 ;
p = head;
int div = p- > val;
//cout<<"div : "<<div<<" Old:"<<old<<endl;
while ( flag)
{
while ( div * div <= old)
{
//cout<<"DIV :"<<div<<" old : "<<old<<endl;
if ( old% div == 0 )
{
old+ = 2 ;
break ;
}
p= p- > nxt;
div = p- > val;
}
if ( div * div > old)
{
flag = false ;
}
}
//cout<<"nxt Prime = " << old <<endl;
return old;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCgp0eXBlZGVmIHN0cnVjdCBMaW5rCnsKCWludCB2YWw7CglzdHJ1Y3QgTGluayAqbnh0Owp9TGluazsKCnZvaWQgcHJpbnRQcmltZShpbnQgbSxpbnQgbik7CnZvaWQgYWRkTGlzdChpbnQgdmFsKTsKaW50IG54dFByaW1lKGludCBvbGQpOwoKTGluayAqaGVhZCAgPSBuZXcgTGluazsKCnZvaWQgUHJpbnRMaW5rKCkKewoJTGluayAqdCA9IGhlYWQ7Cgljb3V0PDwiUFJJTlQgTElOSyI7Cgl3aGlsZSh0IT1OVUxMKQoJewoJCWNvdXQ8PCJWQUwgPSAiPDx0LT52YWw8PGVuZGw7CgkJdD10LT5ueHQ7Cgl9Cn0KCgppbnQgbWFpbigpCnsKCWludCB0LG0sbjsKCS8vY291dDw8ImVudGVyIFQ6ICI8PGVuZGw7CgljaW4+PnQ7CgkKCWhlYWQgLT52YWwgPSAyOwoJaGVhZC0+bnh0ID0gTlVMTDsKCQkKCQoJZm9yKGludCBpPTA7aTx0O2krKykKCXsKCQkvL2NvdXQ8PCJlbnRlciBtIG46ICI8PGVuZGw7CgkJY2luPj5tPj5uOwoJCQoJCS8vbS1uIHByaW1lIG51bQoJCXByaW50UHJpbWUobSxuKTsKCQkvL2NoZWNrOj0KCQkKCQkvKmZvcihpbnQgaj0yO2o8bTtqKyspCgkJewoJCQljb3V0PDwiTnh0IFByaW1lIDogIjw8bnh0UHJpbWUoaik8PGVuZGw7CgkJfSovCgkJCgkJY291dDw8ZW5kbDsKCX0KCQoJcmV0dXJuIDA7Cn0KCnZvaWQgcHJpbnRQcmltZShpbnQgbSxpbnQgbikKewoJaWYobTw9Mil7CgkJLy9jb3V0PDwiUHJpbWUgRm91bmQ6ICI8PG08PGVuZGw7CgkJbT0zOwoJCS8vcmV0dXJuOwoJfQoJaWYobSUyPT0wKQoJCW0rKzsKCWZvcihpbnQgaT1tO2k8PW47aT1pKzIpCgl7CgkJYm9vbCBmbGFnID0gdHJ1ZTsKCQkvL2NvdXQ8PCJWYWx1ZSB0byBiZSBjaGVja2VkOiAiPDxpPDxlbmRsOwoJCQoJCUxpbmsgKnAgPWhlYWQ7CgkJaW50IGRpdiA9IHAtPnZhbDsKCQl3aGlsZSgoZGl2KmRpdiA8PSBpKSAmJiAocC0+bnh0ICE9IE5VTEwpKQoJCXsKCQkJLy9jb3V0PDwiZGl2ID09ICI8PCBwLT52YWwgPDxlbmRsOwoJCQlpZihpJXAtPnZhbCA9PSAwKQoJCQl7CgkJCQlmbGFnID0gZmFsc2U7CgkJCQlicmVhazsKCQkJfQoJCQlwID0gcC0+bnh0OwoJCQlkaXY9cC0+dmFsOwoJCX0KCgkJd2hpbGUoIChkaXYqZGl2IDw9IGkpICAmJiAoZmxhZz09dHJ1ZSkpCgkJewoJCQkvL2NvdXQ8PCJBZGQgbGlzdCBkaXYgID09ICI8PCBkaXYgPDxlbmRsOwoJCQlpZihpJWRpdiA9PSAwKQoJCQl7CgkJCQlmbGFnID0gZmFsc2U7CgkJCQlicmVhazsKCQkJfQoJCQlkaXYgPSBueHRQcmltZShkaXYpOwoJCQlMaW5rICpxID0gbmV3IExpbms7CgkJCXEtPnZhbCA9IGRpdjsKCQkJcS0+bnh0ID0gTlVMTDsKCQkJcC0+bnh0ID0gcTsKCQkJcD1wLT5ueHQ7CgkJCQoJCX0KCQlpZihmbGFnKQoJCQljb3V0PDwiUHJpbWUgRk91bmQ6ICI8PGk8PGVuZGw7Cgl9Cn0KCmludCBueHRQcmltZShpbnQgb2xkKQp7CglMaW5rICpwIDsKCWJvb2wgZmxhZyA9IHRydWU7CgkKCWlmKG9sZCA9PSAyKQoJCW9sZCsrOwoJZWxzZQoJCW9sZCs9MjsKCQoJcCA9IGhlYWQ7CglpbnQgZGl2ID0gcC0+dmFsOwoJLy9jb3V0PDwiZGl2IDogIjw8ZGl2PDwiIE9sZDoiPDxvbGQ8PGVuZGw7CgkKCXdoaWxlKGZsYWcpCgl7CQoJCXdoaWxlKGRpdipkaXYgPD0gb2xkKQoJCXsKCQkJLy9jb3V0PDwiRElWIDoiPDxkaXY8PCIgICBvbGQgOiAiPDxvbGQ8PGVuZGw7CgkJCWlmKG9sZCVkaXY9PTApCgkJCXsKCQkJCW9sZCs9MjsKCQkJCWJyZWFrOwoJCQl9CgkJCXA9cC0+bnh0OwoJCQlkaXYgPSBwLT52YWw7CgkJfQoJCWlmKGRpdipkaXYgPiBvbGQpCgkJewoJCQlmbGFnID0gZmFsc2U7CgkJfQoJfQoJLy9jb3V0PDwibnh0IFByaW1lID0gIiA8PCBvbGQgPDxlbmRsOwoJcmV0dXJuIG9sZDsKfQo=