diff --git a/projecteuler/077/main.cpp b/projecteuler/077/main.cpp new file mode 100644 index 0000000..8c855f4 --- /dev/null +++ b/projecteuler/077/main.cpp @@ -0,0 +1,60 @@ +#include + +using namespace std; + +int MAXN = 1000; + +vector genPrimes(int n){ + vector primeBinary(n+1, true); + + for(int i = 2; i <= n; ++i){ + if(primeBinary[i]){ + for(int j = 2 * i; j <= n; j += i){ + primeBinary[j] = false; + } + } + } + + vector result; + + for(int i = 2; i <= n; ++i){ + if(primeBinary[i]){ + result.push_back(i); + } + } + + return result; +} + +int main(){ + + cout << "Hello this is Patrick" << endl; + auto start = chrono::high_resolution_clock::now(); + + auto primes = genPrimes(MAXN); + set primeSet(primes.begin(), primes.end()); + + vector solutions(MAXN + 1, 0); + solutions[0] = 1; + + for(int i = 2; i <= MAXN; ++i){ + if(primeSet.count(i)){ + for(int pos = 0; pos <= MAXN - i; ++pos){ + solutions[pos + i] += solutions[pos]; + } + } + } + + for(int i = 0; i < solutions.size(); ++i){ + // cout << solutions[i] << " "; + if(solutions[i] > 5000){ + cout << i << endl; + break; + } + } + + + auto duration = chrono::duration_cast(chrono::high_resolution_clock::now() - start); + cout << (float)duration.count()/1000 << endl; + return 0; +}