diff --git a/bench/algorithm/nsieve/3.cpp b/bench/algorithm/nsieve/3.cpp new file mode 100644 index 00000000..910e1064 --- /dev/null +++ b/bench/algorithm/nsieve/3.cpp @@ -0,0 +1,36 @@ +// The Computer Language Shootout +// http://shootout.alioth.debian.org/ +// Precedent C entry modified by bearophile for speed and size, 31 Jan 2006 +// Converted to C++ by Paul Kitchin + +#include +#include +#include +#include + +#include +#include +#include +#include + +inline void nsieve(unsigned int limit) { + std::vector primes(limit + 1, true); + primes[1] = false; + unsigned int p = 2; + while (p <= static_cast(std::sqrt(limit))) { + for (unsigned int i = p * p; i <= limit; i += p) { + primes[i] = false; + } + p = std::find(primes.begin() + p + 1, primes.end(), true) - primes.begin(); + } + unsigned int primeCount = std::count(primes.begin(), primes.end(), true); + std::cout << "Primes up to " << std::setw(8) << limit << std::setw(9) << primeCount << '\n'; +} + +int main(int argc, char **argv) { + unsigned int n = (argc <= 1) ? 4 : std::atoi(argv[1]); + for (unsigned int i = n; i >= n - 2; --i) { + nsieve(10000 << i); + } + return 0; +} diff --git a/bench/bench_cpp.yaml b/bench/bench_cpp.yaml index e17d7c0a..424195b5 100644 --- a/bench/bench_cpp.yaml +++ b/bench/bench_cpp.yaml @@ -18,6 +18,7 @@ problems: - name: nsieve source: - 1.cpp + - 3.cpp compiler_version_command: compiler_version_regex: runtime_version_parameter: