#include <cmath>
#include <iostream>
#include <vector>
#include <stdint.h>
namespace {
// yield all prime numbers less than limit.
// http://r...content-available-to-author-only...e.org/wiki/Category:C%2B%2B
template<class UnaryFunction>
void primesupto(int limit, UnaryFunction yield)
{
std::vector<bool> is_prime(limit, true);
const int sqrt_limit = static_cast<int>(std::sqrt(limit));
for (int n = 2; n <= sqrt_limit; ++n)
if (is_prime[n]) {
yield(n);
for (unsigned k = n*n, ulim = static_cast<unsigned>(limit); k < ulim; k += n)
//NOTE: "unsigned" is used to avoid an overflow in `k+=n` for `limit` near INT_MAX
is_prime[k] = false;
}
for (int n = sqrt_limit + 1; n < limit; ++n)
if (is_prime[n])
yield(n);
}
}
int main() {
uintmax_t sum = 0;
primesupto(2000000, [&sum] (int prime) { sum += prime; });
std::cout << sum << std::endl;
}
I2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCm5hbWVzcGFjZSB7CiAgLy8geWllbGQgYWxsIHByaW1lIG51bWJlcnMgbGVzcyB0aGFuIGxpbWl0LgogIC8vIGh0dHA6Ly9yLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLm9yZy93aWtpL0NhdGVnb3J5OkMlMkIlMkIKICB0ZW1wbGF0ZTxjbGFzcyBVbmFyeUZ1bmN0aW9uPgogIHZvaWQgcHJpbWVzdXB0byhpbnQgbGltaXQsIFVuYXJ5RnVuY3Rpb24geWllbGQpCiAgewogICAgc3RkOjp2ZWN0b3I8Ym9vbD4gaXNfcHJpbWUobGltaXQsIHRydWUpOwoKICAgIGNvbnN0IGludCBzcXJ0X2xpbWl0ID0gc3RhdGljX2Nhc3Q8aW50PihzdGQ6OnNxcnQobGltaXQpKTsKICAgIGZvciAoaW50IG4gPSAyOyBuIDw9IHNxcnRfbGltaXQ7ICsrbikKICAgICAgaWYgKGlzX3ByaW1lW25dKSB7Cgl5aWVsZChuKTsKCglmb3IgKHVuc2lnbmVkIGsgPSBuKm4sIHVsaW0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGltaXQpOyBrIDwgdWxpbTsgayArPSBuKQoJICAvL05PVEU6ICJ1bnNpZ25lZCIgaXMgdXNlZCB0byBhdm9pZCBhbiBvdmVyZmxvdyBpbiBgays9bmAgZm9yIGBsaW1pdGAgbmVhciBJTlRfTUFYCgkgIGlzX3ByaW1lW2tdID0gZmFsc2U7CiAgICAgIH0KCiAgICBmb3IgKGludCBuID0gc3FydF9saW1pdCArIDE7IG4gPCBsaW1pdDsgKytuKQogICAgICBpZiAoaXNfcHJpbWVbbl0pCgl5aWVsZChuKTsKICB9Cn0KCmludCBtYWluKCkgewogIHVpbnRtYXhfdCBzdW0gPSAwOwogIHByaW1lc3VwdG8oMjAwMDAwMCwgWyZzdW1dIChpbnQgcHJpbWUpIHsgc3VtICs9IHByaW1lOyB9KTsKICBzdGQ6OmNvdXQgPDwgc3VtIDw8IHN0ZDo6ZW5kbDsKfQo=