From ff7e343aff8af5ff751daab67cb569fd72347642 Mon Sep 17 00:00:00 2001 From: Philippe Zwietering Date: Mon, 2 May 2022 15:06:28 +0200 Subject: [PATCH] PE 77, used dynamic programming --- projecteuler/077/main.cpp | 60 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 projecteuler/077/main.cpp 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; +}