Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Eratosfen final
//g++ 4.9.3 #include <vector> #include <iostream> class PrimeNumbersGenerator { size_t _max = 0; // Максимальное значение для генератора. size_t _prime = 1; // Текущее простое число. std::vector<bool> _compound; // Массив решета Эратосфена. В составных числах стоят 1. В простых 0. public: // Конструктор. PrimeNumbersGenerator(size_t max):_max(max), _compound(max, false) {} // Генерация следующего простого числа. size_t next() { size_t prev = _prime; for (size_t i = _prime + 1; i < _max; i++) { if (!_compound[i]) { _prime = i; // Заполнение решета с проверкой переполнения. for (size_t i = _prime * _prime; i < _max && i > _prime; i += _prime) { _compound[i] = true; } return prev; } } // -2 ставим для того чтобы войдя в это состояние мы из него больше не вышли. _prime = -2; return prev - 1; // Чтобы в завершенном состоянии всегда выводилось -1 (unsigned). } // Оператор приведения к типу bool. Удобно для завершения цикла вывода простых чисел. operator bool() const { return _prime != -2; } // Оператор вывода следующего простого чеисла в поток вывода. friend std::ostream& operator << (std::ostream& os, PrimeNumbersGenerator& prime) { os << prime.next(); return os; } }; int main() { PrimeNumbersGenerator g(1000); while(g) { std::cout << g << std::endl; } }
run
|
edit
|
history
|
help
0
idfc
virtual function role
break.cpp
StackListHi
insertion_sort
find first non repeating
my template
XML parsing with regex
Longest Palindrom in String
find-missing-number-arithmetic-progression