#include <iostream> #include <vector> #include <math.h> #include <chrono> int main() { const int MAX = 200000000; std::vector<int> factors; std::cout << "Initiallizating" << std::endl; auto start_time = std::chrono::steady_clock::now(); factors.resize(MAX); std::cout << "Initiallization took " << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start_time).count() << " ms" << std::endl; std::cout << "Starting calculation" << std::endl; start_time = std::chrono::steady_clock::now(); int upper_bound = sqrt(MAX) + 1; for (int i = 2; i < upper_bound; ++i) { if (factors[i] == 0) { for (int j = i; j < MAX; j += i) { factors[j] = i; } } } std::cout << "Calculation took " << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start_time).count() << " ms" << std::endl; std::cout << "Validating results" << std::endl; for (int i = 2; i < 20; ++i) { std::cout << i << ": "; if (factors[i] == i) { std::cout << "Is prime"; } else { for (int N = i; N > 1; N /= factors[N]) std::cout << factors[N] << ", "; } std::cout << std::endl; } return 0; }
Standard input is empty
Initiallizating Initiallization took 202 ms Starting calculation Calculation took 3187 ms Validating results 2: Is prime 3: Is prime 4: 2, 2, 5: Is prime 6: 3, 2, 7: Is prime 8: 2, 2, 2, 9: 3, 3, 10: 5, 2, 11: Is prime 12: 3, 2, 2, 13: Is prime 14: 7, 2, 15: 5, 3, 16: 2, 2, 2, 2, 17: Is prime 18: 3, 3, 2, 19: Is prime