C++ Bc. 3 cpp: Porovnání verzí
m komentar (workaround) odsazeni |
m vraceny zpet vsechny Martinovy upravy |
||
(Nejsou zobrazeny 2 mezilehlé verze od stejného uživatele.) | |||
Řádek 1: | Řádek 1: | ||
#include <iostream> | #include <iostream> | ||
#include <vector> | #include <vector> | ||
Řádek 60: | Řádek 58: | ||
} | } | ||
[ [[C++ Bc. 3|Zpět]] ] | [ [[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 ]