1234567891011121314151617181920212223242526272829303132333435363738394041
#include "sieve.hpp" #include <iostream> using namespace std; Sieve::Sieve(long long n) { Sieve::n=n; index=0; total=2; if(n%2==0){ ArrayLen=(n-2)/2; Array=new int[ArrayLen]; } else{ ArrayLen=(n-1)/2; Array=new int[ArrayLen]; } for(int i=0; i<ArrayLen;i++) {Array[i]=1;} } Sieve::~Sieve() { delete[] Array; } unsigned long long Sieve::calc() { while(index<ArrayLen) { while(Array[index]!=1 && index<ArrayLen){index++;} for(unsigned long long i=((2*index)+3); i<ArrayLen;i+=((2*index)+3)) { Array[i]=0; } index++; } for(unsigned long long i=0; i<ArrayLen; i++) { if(Array[i]==1) {total+=((2*i)+3);} } return(total); } int main() { Sieve s(2000000); cout<<s.calc()<<endl; }
123456789101112131415161718
#ifndef SIEVE #define SIVE class Sieve { public: Sieve(long long n); ~Sieve(); unsigned long long calc(); private: long long n; int ArrayLen; int *Array; unsigned long long index; unsigned long long total; }; #endif
186240581510
4469579551475