From 673b908d162caf211e7019d57966fcd30dbe2876 Mon Sep 17 00:00:00 2001 From: Philippe Zwietering Date: Sun, 14 Nov 2021 22:20:56 +0100 Subject: [PATCH] Edited the prime factorization function of 69 so it is quick now --- projecteuler/069/main.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/projecteuler/069/main.cpp b/projecteuler/069/main.cpp index 206cd81..ab75815 100644 --- a/projecteuler/069/main.cpp +++ b/projecteuler/069/main.cpp @@ -35,27 +35,31 @@ vector sieve(int n){ return result; } -vector prime_terms(int n, vector primes = vector()){ - if(primes.empty()){ - primes = sieve(n); - } - +vector prime_terms(int n){ vector result; - for(int p : primes){ - if(p > n){ - break; + if(n % 2 == 0){ + result.push_back(2); + + while(n % 2 == 0){ + n /= 2; } + } - if(n % p == 0){ - result.push_back(p); + for(int i = 3; i <= sqrt(n); i += 2){ + if(n % i == 0){ + result.push_back(i); - while(n % p == 0){ - n /= p; + while(n % i == 0){ + n /= i; } } } + if(n > 2){ + result.push_back(n); + } + return result; } @@ -76,7 +80,7 @@ int main(){ for(size_t i = 2; i < n_phi.size(); ++i){ if(n_phi[i] == 0){ - auto terms = prime_terms(i, primes); + auto terms = prime_terms(i); float acc = 1; for(int t : terms){