#include <iostream>
#include <math.h>
#include <list>
#include <time.h>
using namespace std;
int x,y,z,w=0,n;
int wzornik[168],a=0,b,d,s;
float licznik,zmienna;
list <int> lista;
double czas=0;
int main()
{
clock_t start;
clock_t koniec;
start=clock();
lista.push_back(2);
for ( int liczba=3;liczba<=1000;liczba=liczba+2)
{
lista.push_back(liczba);
}
for ( int liczba=9;liczba<=1000;liczba=liczba+3) lista.remove(liczba);
for ( int liczba=25;liczba<=1000;liczba=liczba+5) lista.remove(liczba);
for ( int liczba=49;liczba<=1000;liczba=liczba+7) lista.remove(liczba);
for ( int liczba=121;liczba<=1000;liczba=liczba+11) lista.remove(liczba);
for ( int liczba=169;liczba<=1000;liczba=liczba+13) lista.remove(liczba);
for ( int liczba=289;liczba<=1000;liczba=liczba+17) lista.remove(liczba);
for ( int liczba=361;liczba<=1000;liczba=liczba+19) lista.remove(liczba);
for ( int liczba=529;liczba<=1000;liczba=liczba+23) lista.remove(liczba);
for ( int liczba=841;liczba<=1000;liczba=liczba+29) lista.remove(liczba);
lista.remove(961);
koniec=clock();
czas=(double)(koniec-start) / CLOCKS_PER_SEC;
cout << " Zajelo to :" << czas << "czasu"<<endl;
//cout<<"Liczb na li\230cie: "<<lista.size()<<endl;
for(list<int>::iterator i=lista.begin(); i!= lista.end() ; i++)
{
b=*i;
//cout<<" "<<b; - wlacz zeby zobaczyc tablice wzorcowa
wzornik[a]=b;
a=a+1;
}
koniec=clock();
czas=(double)(koniec-start) / CLOCKS_PER_SEC;
cout << " Zajelo to :" << czas << "czasu"<<endl;
for ( int liczba=999;liczba<=1000000;liczba++)
{
s=0;
for (d=0;d<=167;d++)
{
zmienna=liczba;
licznik=(zmienna/wzornik[d])/(round(liczba/wzornik[d]));
if (licznik==1) d=200;
else s++;
}
if (s>=168)
{
lista.push_back(liczba);
}
}
cin>>n;
for (int u=0;u<=n-1;u++)
{
cin>>x>>y;
for(list<int>::iterator j=lista.begin(); j!= lista.end() ; j++)
{
z=*j;
if ((z>=x)&&(z<=y)) w++;
}
cout<<w<<endl;
w=0;
}
koniec=clock();
czas=(double)(koniec-start) / CLOCKS_PER_SEC;
cout << " Zajelo to :" << czas << "czasu"<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHRpbWUuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IHgseSx6LHc9MCxuOwppbnQgd3pvcm5pa1sxNjhdLGE9MCxiLGQsczsKZmxvYXQgbGljem5payx6bWllbm5hOwpsaXN0IDxpbnQ+IGxpc3RhOwpkb3VibGUgY3phcz0wOwppbnQgbWFpbigpCnsKICAgIGNsb2NrX3Qgc3RhcnQ7CiAgICBjbG9ja190IGtvbmllYzsKICAgIHN0YXJ0PWNsb2NrKCk7CiAgICBsaXN0YS5wdXNoX2JhY2soMik7CiAgICBmb3IgKCBpbnQgbGljemJhPTM7bGljemJhPD0xMDAwO2xpY3piYT1saWN6YmErMikKICAgIHsKICAgIGxpc3RhLnB1c2hfYmFjayhsaWN6YmEpOwogICAgfQogICAgZm9yICggaW50IGxpY3piYT05O2xpY3piYTw9MTAwMDtsaWN6YmE9bGljemJhKzMpIGxpc3RhLnJlbW92ZShsaWN6YmEpOwogICAgZm9yICggaW50IGxpY3piYT0yNTtsaWN6YmE8PTEwMDA7bGljemJhPWxpY3piYSs1KSBsaXN0YS5yZW1vdmUobGljemJhKTsKICAgIGZvciAoIGludCBsaWN6YmE9NDk7bGljemJhPD0xMDAwO2xpY3piYT1saWN6YmErNykgbGlzdGEucmVtb3ZlKGxpY3piYSk7CiAgICBmb3IgKCBpbnQgbGljemJhPTEyMTtsaWN6YmE8PTEwMDA7bGljemJhPWxpY3piYSsxMSkgbGlzdGEucmVtb3ZlKGxpY3piYSk7CiAgICBmb3IgKCBpbnQgbGljemJhPTE2OTtsaWN6YmE8PTEwMDA7bGljemJhPWxpY3piYSsxMykgbGlzdGEucmVtb3ZlKGxpY3piYSk7CiAgICBmb3IgKCBpbnQgbGljemJhPTI4OTtsaWN6YmE8PTEwMDA7bGljemJhPWxpY3piYSsxNykgbGlzdGEucmVtb3ZlKGxpY3piYSk7CiAgICBmb3IgKCBpbnQgbGljemJhPTM2MTtsaWN6YmE8PTEwMDA7bGljemJhPWxpY3piYSsxOSkgbGlzdGEucmVtb3ZlKGxpY3piYSk7CiAgICBmb3IgKCBpbnQgbGljemJhPTUyOTtsaWN6YmE8PTEwMDA7bGljemJhPWxpY3piYSsyMykgbGlzdGEucmVtb3ZlKGxpY3piYSk7CiAgICBmb3IgKCBpbnQgbGljemJhPTg0MTtsaWN6YmE8PTEwMDA7bGljemJhPWxpY3piYSsyOSkgbGlzdGEucmVtb3ZlKGxpY3piYSk7CiAgICBsaXN0YS5yZW1vdmUoOTYxKTsKICAgIGtvbmllYz1jbG9jaygpOwogICAgY3phcz0oZG91YmxlKShrb25pZWMtc3RhcnQpIC8gQ0xPQ0tTX1BFUl9TRUM7CiAgICBjb3V0IDw8ICIgWmFqZWxvIHRvIDoiIDw8IGN6YXMgPDwgImN6YXN1Ijw8ZW5kbDsKICAgIC8vY291dDw8IkxpY3piIG5hIGxpXDIzMGNpZTogIjw8bGlzdGEuc2l6ZSgpPDxlbmRsOwogICAgZm9yKGxpc3Q8aW50Pjo6aXRlcmF0b3IgaT1saXN0YS5iZWdpbigpOyBpIT0gbGlzdGEuZW5kKCkgOyBpKyspCiAgICB7CiAgICAgICAgYj0qaTsKICAgICAgICAvL2NvdXQ8PCIgIjw8YjsgLSB3bGFjeiB6ZWJ5IHpvYmFjenljIHRhYmxpY2Ugd3pvcmNvd2EKICAgICAgICB3em9ybmlrW2FdPWI7CiAgICAgICAgYT1hKzE7CiAgICB9CiAgICBrb25pZWM9Y2xvY2soKTsKICAgIGN6YXM9KGRvdWJsZSkoa29uaWVjLXN0YXJ0KSAvIENMT0NLU19QRVJfU0VDOwogICAgY291dCA8PCAiIFphamVsbyB0byA6IiA8PCBjemFzIDw8ICJjemFzdSI8PGVuZGw7CiAgICBmb3IgKCBpbnQgbGljemJhPTk5OTtsaWN6YmE8PTEwMDAwMDA7bGljemJhKyspCiAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHM9MDsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChkPTA7ZDw9MTY3O2QrKykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgem1pZW5uYT1saWN6YmE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWN6bmlrPSh6bWllbm5hL3d6b3JuaWtbZF0pLyhyb3VuZChsaWN6YmEvd3pvcm5pa1tkXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpY3puaWs9PTEpIGQ9MjAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBzKys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM+PTE2OCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGEucHVzaF9iYWNrKGxpY3piYSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIH0KICAgIGNpbj4+bjsKICAgIGZvciAoaW50IHU9MDt1PD1uLTE7dSsrKQogICAgewogICAgICAgIGNpbj4+eD4+eTsKICAgICAgICBmb3IobGlzdDxpbnQ+OjppdGVyYXRvciBqPWxpc3RhLmJlZ2luKCk7IGohPSBsaXN0YS5lbmQoKSA7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICB6PSpqOwogICAgICAgICAgICBpZiAoKHo+PXgpJiYoejw9eSkpIHcrKzsKICAgICAgICAgICAgfQogICAgICAgY291dDw8dzw8ZW5kbDsKICAgICAgIHc9MDsKICAgIH0KICAgIGtvbmllYz1jbG9jaygpOwogICAgY3phcz0oZG91YmxlKShrb25pZWMtc3RhcnQpIC8gQ0xPQ0tTX1BFUl9TRUM7CiAgICBjb3V0IDw8ICIgWmFqZWxvIHRvIDoiIDw8IGN6YXMgPDwgImN6YXN1Ijw8ZW5kbDsKcmV0dXJuIDA7Cn0=