#include #include using std::cout; using std::cin; /************************************************************************** PROTOTYPY FUNKCJI **************************************************************************/ unsigned int* generuj_tablice(const unsigned int &dlugosc); //zwraca pointer z zadeklarowaną tablicą //wypełnioną kolejnymi liczbami naturalnymi void wyszukaj_pierwsze(const unsigned int &dlugosc, unsigned int tablica_sita[]); unsigned int najmniejsza_poza_0(const unsigned int &dlugosc, unsigned int tablica_do_przeszukania[]); void print_table(unsigned int const &dlugosc, unsigned int const tablica_do_wydrukowania[]); /************************************************************************** IMPLEMENTACJE FUNKCJI **************************************************************************/ unsigned int* generuj_tablice(const unsigned int &dlugosc) { unsigned int *tablica = new unsigned int [dlugosc+1]; for(int i=0; i<=dlugosc; i++) tablica[i]=i; return tablica; } void wyszukaj_pierwsze(const unsigned int &dlugosc, unsigned int tablica_sita[]) { unsigned int aktualny_element=2; //zaczynam od pierwszej liczby pierwszej, tabela jest od zera unsigned int zerowany_element; unsigned int pierwiastek_dlugosci = (unsigned int) sqrt(dlugosc); do { zerowany_element = aktualny_element*2; while (zerowany_element < dlugosc) { tablica_sita[zerowany_element] = 0; zerowany_element += aktualny_element; } aktualny_element = najmniejsza_poza_0(dlugosc-aktualny_element-1, &tablica_sita[aktualny_element+1]); } while (aktualny_element <= pierwiastek_dlugosci); //przerabiamy tylko do polowy, poniewaz dalej nie ma zadnych dzielnikow //(n nie dzieli sie przez liczbe wieksza od n div 2) } unsigned int najmniejsza_poza_0(const unsigned int &dlugosc, unsigned int tablica_do_przeszukania[]) { unsigned int element=0; //zaczynamy początku tablicy do { if (tablica_do_przeszukania[element] != 0) { return tablica_do_przeszukania[element]; } } while(element++ < dlugosc); return 0; } void print_table(unsigned int const &dlugosc, unsigned int const tablica_do_wydrukowania[]) { cout<<"\n\nZnalezione liczby pierwsze to:\n"; long long tempik=0; for (int i=2; i>dlugosc; } while(dlugosc==0); dlugosc++; //chodzi o to zeby pozniej tablica_sita[i] == i //zeby adresowanie bylo od pierwszego elementu cout<<"Generuje tablice wypelniana kolejnymi liczbami naturalnymi.\nRozmiar tablicy:"; if (dlugosc*sizeof(unsigned int) < 1024) cout <