fork(1) download
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <math.h>
  4. #include <new>
  5.  
  6. using namespace std;
  7.  
  8. struct Prim //struktura z jedna liczba
  9. {
  10. int x; //wartosc podanej liczby
  11. bool status; //status: true - liczba pierwsza, false - nie liczba pierwsza
  12. Prim *next; //wskaznik na nastêpny element listy
  13. };
  14.  
  15.  
  16. int main()
  17. {
  18. int n,i,j,maxi;
  19. Prim *head = NULL; //deklaracja glowy i nadanie jej adresu zerowego
  20. Prim *tail = NULL; //deklaracja ogona i nadanie jej adresu zerowego
  21. Prim *nowy;
  22.  
  23. cout<<"Podaj zakres liczb ";
  24. cin>>n;
  25.  
  26. for(i=2; i<=n; i++) //tworzy liste
  27. {
  28. nowy=new Prim; //tworzenie nowego obiektu typu prim
  29.  
  30. nowy->next=NULL; //nastepny element wskazuje na NULL
  31. nowy->x=i; //nadanie wartosci liczby takiej jaka jest w danej iteracji
  32. nowy->status=true; //domyslnie kazda liczba ma status true
  33.  
  34. if(head==NULL)//sprawdza czy zostal juz utworzony pierwszy element listy
  35. {
  36. head=nowy; //glowa przyjmuje adres pierwszego elementu
  37. tail=head; //ogon tez wskazuje na pierwszy element, bo to jest pierwszy element listy
  38. }
  39. else
  40. {
  41. tail->next=nowy; //jesli lista zawiera juz pierwszy element, ogonowi dajemy wskaznik nastepnego elementu
  42. tail=nowy;
  43. }
  44. }
  45.  
  46. maxi=sqrt(n); //tworzenie warunku stopu, czyli do jakiej liczby ma sie wykonywac algorytm sita
  47. Prim *wsk=head;
  48. //pomocniczy wskaznik do przeszukiwania listy
  49. for(i=2; i<=maxi; i++){ //iteracja wykonuje się tylko dla wielokrotnosci liczb nie wiekszych od maxi
  50.  
  51. if(wsk->status==true){
  52. Prim *wsk2=wsk;
  53. for(j=2*i;j<=n;j++){
  54.  
  55. if(j%i==0){
  56. wsk2=wsk2->next;
  57. wsk2->status=false;
  58.  
  59. cout<<wsk2->x<<endl;
  60. }
  61. else wsk2=wsk2->next;
  62. cout<<"W elsie: "<<j<<endl;
  63. }
  64.  
  65.  
  66. }
  67. wsk=wsk->next;
  68.  
  69. }
  70.  
  71. Prim *temp=head; //poczatek wyswietlania elementow listy
  72. cout<<"Liczby pierwsze z danego przedzialu to:"<<endl;
  73. while(temp!=NULL){ //wyswietlanie elementow listy ze statusem true
  74. if(temp->status==true){
  75. cout<<temp->x<<endl;
  76. temp=temp->next;
  77. }
  78. else temp=temp->next;
  79.  
  80.  
  81. }
  82.  
  83. return 0;
  84. }
  85.  
  86.  
  87.  
  88.  
Success #stdin #stdout 0s 15240KB
stdin
10
stdout
Podaj zakres liczb 3
W elsie: 4
W elsie: 5
5
W elsie: 6
W elsie: 7
7
W elsie: 8
W elsie: 9
9
W elsie: 10
Liczby pierwsze z danego przedzialu to:
2
4
6
8
10