diff --git a/cpp/nth-prime/nth_prime.cpp b/cpp/nth-prime/nth_prime.cpp index 213a72a..2c62d52 100644 --- a/cpp/nth-prime/nth_prime.cpp +++ b/cpp/nth-prime/nth_prime.cpp @@ -39,16 +39,16 @@ number_t nth(size_t n, size_t sieve_size) number_t sieve_first = 1; - auto process_prime = [sieve_size,&sieve](const number_t &p, number_t &next) { + auto process_prime = [&](size_t pn) { - number_t i = next; + number_t i = next[pn]; - for (; i < sieve_size; i += p) { + for (; i < sieve_size; i += primes[pn]) { sieve[i] = true; } - next = i - sieve_size; + next[pn] = i - sieve_size; }; auto create_next = [&sieve_first](number_t p) -> number_t { @@ -66,7 +66,7 @@ number_t nth(size_t n, size_t sieve_size) for (size_t pn = 0; pn < primes.size(); ++pn) { - process_prime(primes[pn], next[pn]); + process_prime(pn); } for (size_t i = 0; i < sieve_size; ++i) { @@ -74,19 +74,18 @@ number_t nth(size_t n, size_t sieve_size) if (sieve[i]) continue; - number_t p = sieve_first + 2*i; - + number_t p = sieve_first + 2*i; + size_t pn = primes.size(); + primes.push_back(p); - if (primes.size() == n - 1) + if (pn == n - 2) return p; - size_t pn = primes.size() - 1; - next[pn] = create_next(p); sieve[i] = true; - process_prime(primes[pn], next[pn]); + process_prime(pn); } number_t next_sieve_first = sieve_first + 2*sieve_size;