#include <iostream>
#include <cstdlib>
#include <math.h>
#include <new>
using namespace std;
struct Prim //struktura z jedna liczba
{
int x; //wartosc podanej liczby
bool status; //status: true - liczba pierwsza, false - nie liczba pierwsza
Prim *next; //wskaznik na nastêpny element listy
};
int main()
{
int n,i,j,maxi;
Prim *head = NULL; //deklaracja glowy i nadanie jej adresu zerowego
Prim *tail = NULL; //deklaracja ogona i nadanie jej adresu zerowego
Prim *nowy;
cout<<"Podaj zakres liczb ";
cin>>n;
for(i=2; i<=n; i++) //tworzy liste
{
nowy=new Prim; //tworzenie nowego obiektu typu prim
nowy->next=NULL; //nastepny element wskazuje na NULL
nowy->x=i; //nadanie wartosci liczby takiej jaka jest w danej iteracji
nowy->status=true; //domyslnie kazda liczba ma status true
if(head==NULL)//sprawdza czy zostal juz utworzony pierwszy element listy
{
head=nowy; //glowa przyjmuje adres pierwszego elementu
tail=head; //ogon tez wskazuje na pierwszy element, bo to jest pierwszy element listy
}
else
{
tail->next=nowy; //jesli lista zawiera juz pierwszy element, ogonowi dajemy wskaznik nastepnego elementu
tail=nowy;
}
}
maxi=sqrt(n); //tworzenie warunku stopu, czyli do jakiej liczby ma sie wykonywac algorytm sita
Prim *wsk=head; //pomocniczy wskaznik do przeszukiwania listy
for(i=2; i<=maxi; i++) //iteracja wykonuje się tylko dla wielokrotnosci liczb nie wiekszych od maxi
{
if(head->x==i)
{
j=i+i;
while(j<=n)
{
if(wsk->x==j)
{
wsk->status=false;
wsk=wsk->next;
j+=i;
}
else
{
wsk=wsk->next;
j+=i;
}
}
}
}
Prim *temp=head; //poczatek wyswietlania elementow listy
while(temp!=NULL)
{
if(temp->status=true)
cout<<temp->x<<endl;
temp=temp->next;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPG1hdGguaD4KI2luY2x1ZGUgPG5ldz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgUHJpbSAvL3N0cnVrdHVyYSB6IGplZG5hIGxpY3piYQp7CiAgICBpbnQgeDsgLy93YXJ0b3NjIHBvZGFuZWogbGljemJ5CiAgICBib29sIHN0YXR1czsgLy9zdGF0dXM6IHRydWUgLSBsaWN6YmEgcGllcndzemEsIGZhbHNlIC0gbmllIGxpY3piYSBwaWVyd3N6YQogICAgUHJpbSAqbmV4dDsgLy93c2them5payBuYSBuYXN0w6pwbnkgZWxlbWVudCBsaXN0eQp9OwoKCmludCBtYWluKCkKewogICAgaW50IG4saSxqLG1heGk7CiAgICBQcmltICpoZWFkID0gTlVMTDsgLy9kZWtsYXJhY2phIGdsb3d5IGkgbmFkYW5pZSBqZWogYWRyZXN1IHplcm93ZWdvCiAgICBQcmltICp0YWlsID0gTlVMTDsgLy9kZWtsYXJhY2phIG9nb25hIGkgbmFkYW5pZSBqZWogYWRyZXN1IHplcm93ZWdvCiAgICBQcmltICpub3d5OwoKICAgIGNvdXQ8PCJQb2RhaiB6YWtyZXMgbGljemIgIjsKICAgIGNpbj4+bjsKCiAgICBmb3IoaT0yOyBpPD1uOyBpKyspIC8vdHdvcnp5IGxpc3RlCiAgICB7CiAgICAgICAgbm93eT1uZXcgUHJpbTsgLy90d29yemVuaWUgbm93ZWdvIG9iaWVrdHUgdHlwdSBwcmltCgogICAgICAgIG5vd3ktPm5leHQ9TlVMTDsgLy9uYXN0ZXBueSBlbGVtZW50IHdza2F6dWplIG5hIE5VTEwKICAgICAgICBub3d5LT54PWk7IC8vbmFkYW5pZSB3YXJ0b3NjaSBsaWN6YnkgdGFraWVqIGpha2EgamVzdCB3IGRhbmVqIGl0ZXJhY2ppCiAgICAgICAgbm93eS0+c3RhdHVzPXRydWU7IC8vZG9teXNsbmllIGthemRhIGxpY3piYSBtYSBzdGF0dXMgdHJ1ZQoKICAgICAgICBpZihoZWFkPT1OVUxMKS8vc3ByYXdkemEgY3p5IHpvc3RhbCBqdXogdXR3b3J6b255IHBpZXJ3c3p5IGVsZW1lbnQgbGlzdHkKICAgICAgICB7CiAgICAgICAgICAgIGhlYWQ9bm93eTsgLy9nbG93YSBwcnp5am11amUgYWRyZXMgcGllcndzemVnbyBlbGVtZW50dQogICAgICAgICAgICB0YWlsPWhlYWQ7IC8vb2dvbiB0ZXogd3NrYXp1amUgbmEgcGllcndzenkgZWxlbWVudCwgYm8gdG8gamVzdCBwaWVyd3N6eSBlbGVtZW50IGxpc3R5CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHRhaWwtPm5leHQ9bm93eTsgLy9qZXNsaSBsaXN0YSB6YXdpZXJhIGp1eiBwaWVyd3N6eSBlbGVtZW50LCBvZ29ub3dpIGRhamVteSB3c2them5payBuYXN0ZXBuZWdvIGVsZW1lbnR1CiAgICAgICAgICAgIHRhaWw9bm93eTsKICAgICAgICB9CiAgICB9CgogICAgbWF4aT1zcXJ0KG4pOyAvL3R3b3J6ZW5pZSB3YXJ1bmt1IHN0b3B1LCBjenlsaSBkbyBqYWtpZWogbGljemJ5IG1hIHNpZSB3eWtvbnl3YWMgYWxnb3J5dG0gc2l0YQogICAgUHJpbSAqd3NrPWhlYWQ7IC8vcG9tb2NuaWN6eSB3c2them5payBkbyBwcnplc3p1a2l3YW5pYSBsaXN0eQogICAgZm9yKGk9MjsgaTw9bWF4aTsgaSsrKSAvL2l0ZXJhY2phIHd5a29udWplIHNpxJkgdHlsa28gZGxhIHdpZWxva3JvdG5vc2NpIGxpY3piICBuaWUgd2lla3N6eWNoIG9kIG1heGkKICAgIHsKICAgICAgICBpZihoZWFkLT54PT1pKQoKICAgICAgICB7CiAgICAgICAgICAgIGo9aStpOwoKICAgICAgICAgICAgd2hpbGUoajw9bikKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIGlmKHdzay0+eD09aikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB3c2stPnN0YXR1cz1mYWxzZTsKICAgICAgICAgICAgICAgICAgICB3c2s9d3NrLT5uZXh0OwogICAgICAgICAgICAgICAgICAgIGorPWk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgd3NrPXdzay0+bmV4dDsKICAgICAgICAgICAgICAgICAgICBqKz1pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIFByaW0gKnRlbXA9aGVhZDsgLy9wb2N6YXRlayB3eXN3aWV0bGFuaWEgZWxlbWVudG93IGxpc3R5CiAgICB3aGlsZSh0ZW1wIT1OVUxMKQogICAgewogICAgICAgIGlmKHRlbXAtPnN0YXR1cz10cnVlKQogICAgICAgICAgICBjb3V0PDx0ZW1wLT54PDxlbmRsOwogICAgICAgIHRlbXA9dGVtcC0+bmV4dDsKCiAgICB9CgogICAgcmV0dXJuIDA7Cn0K