C++ Bc. 3 cpp: Porovnání verzí
Bez shrnutí editace |
m vraceny zpet vsechny Martinovy upravy |
||
(Není zobrazeno 8 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 8: | Řádek 8: | ||
int main() | int main() | ||
{ | { | ||
Prvocisla p; | Prvocisla p; | ||
erathosthenovo_sito (100, p); | |||
erathosthenovo_sito ( | |||
for (Prvocisla::const_iterator i=p.begin(), e=p.end(); i!=e; ++i) | for (Prvocisla::const_iterator i=p.begin(), e=p.end(); i!=e; ++i) | ||
Řádek 38: | Řádek 35: | ||
Prvocisla p(N+1); | Prvocisla p(N+1); | ||
for (int i= | for (int i=2; i<=N; i++) p[i] = i; | ||
// nyni prochazim seznam prvocisel. V seznamu kandidatu oznacim vzdy | // nyni prochazim seznam prvocisel. V seznamu kandidatu oznacim vzdy | ||
Řádek 56: | Řádek 53: | ||
// Zkopirujeme vsechna nalezena prvocisla do vystupnho seznamu | // Zkopirujeme vsechna nalezena prvocisla do vystupnho seznamu | ||
for (int i= | for (int i=2; i<=N; i++) | ||
if (p[i]) | if (p[i]) | ||
prvocisla.push_back(i); | prvocisla.push_back(i); | ||
Řádek 62: | Řádek 59: | ||
} | } | ||
[ [[C | [ [[C++ Bc. 3|Zpět]] ] | ||
[[Kategorie:Programování]] | |||
[[Kategorie:C++]] |
Aktuální verze z 20. 4. 2008, 20:31
#include <iostream> #include <vector> typedef std::vector<int> Prvocisla; void erathosthenovo_sito(int N, Prvocisla& prvocisla); int main() { Prvocisla p; erathosthenovo_sito (100, p); for (Prvocisla::const_iterator i=p.begin(), e=p.end(); i!=e; ++i) std::cout << *i << " "; std::cout << "\n"; } void erathosthenovo_sito(int N, Prvocisla& prvocisla) { // nejprve vymazeme obsah vystupniho seznamu prvocisla.clear(); if (N <= 0) return; // Naplnim seznam kandidatu na prvocisla hodnotami od 1 do // N. Protoze jsou standardni kontejnery indexovany od nuly, // vytvorim kontejner o velikosti N+1 prvku a nulty prvek ignoruji // Poznamka: p[0] bude inicializovano na nulu, protoze se v // sablonach pro datove cleny pouzivaji implicitni konstruktory a i // zakladni ciselne typy jsou inicializovany na nulu, tj. napr. p[0] // = int(); Prvocisla p(N+1); for (int i=2; i<=N; i++) p[i] = i; // nyni prochazim seznam prvocisel. V seznamu kandidatu oznacim vzdy // vsechny nasobky kazdeho prvocisla nulou (nejsou to prvocisla) for (int i=2; 2*i<=N; i++) if (p[i] != 0) { int k = 2*i; while (k <= N) { p[k] = 0; k += i; } } // Zkopirujeme vsechna nalezena prvocisla do vystupnho seznamu for (int i=2; i<=N; i++) if (p[i]) prvocisla.push_back(i); }
[ Zpět ]