Problem 10
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
Find the sum of all the primes below two million.
C++:
#include <iostream> #include <cstring> #include <cmath> using namespace std; const int MAXN = 2000000; bool sieveflag[MAXN+1]; void esieve(int n) { // 初始化 memset(sieveflag, true, sizeof(sieveflag)); sieveflag[0] = false; sieveflag[1] = false; for(int i=4; i<=n; i+=2) sieveflag[i] = false; // 筛选 int max = sqrt(n); for(int i=3; i<=max; i+=2) { if(sieveflag[i]) { for(int j=i+i; j<=n; j+=i) sieveflag[j] = false; } } } int main() { esieve(MAXN); int n; while(cin >> n && n<=MAXN) { long sum = 2; for(int i=3; i<n; i+=2) if(sieveflag[i]) sum += i; cout << sum << endl; } return 0; }
参考链接:Eratosthenes筛选法