#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 <<"Zbudowano baze liczb pierwszych ponizej 1000 - Zajelo to :" << czas << "czasu"<<endl;
cout<<"Liczb na liscie: "<<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 << "Przekopiowano baze z LISTy do tablicy - 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);
}
}
koniec=clock();
czas=(double)(koniec-start) / CLOCKS_PER_SEC;
cout << "Zbudowano baze 78498 liczb pierwszych do 1 MLN Zajelo to : " << czas << " czasu od startu"<<endl;
cout<<"Liczb na liscie: "<<lista.size()<<endl;
//cin>>n;
n=20000;
for (int u=0;u<=n-1;u++)
{
//cin>>x>>y;
x=1,y=1000000;
for(list<int>::iterator j=lista.begin(); j!= lista.end() ; j++)
{
z=*j;
if ((z>=x)&&(z<=y)) w++;
}
//cout<<w;
//cout<<"Odpowiedz na zapytanie o ilosc liczb pierwszych z zapytania na wejsciu: "<<w<<endl;
w=0;
}
koniec=clock();
czas=(double)(koniec-start) / CLOCKS_PER_SEC;
cout << "Wykonano zapytania zgodnie z danymi WEJSCIOWYMI Zajelo to :" << czas << "czasu"<<endl;
return 0;
}