Edited the prime factorization function of 69 so it is quick now

This commit is contained in:
2021-11-14 22:20:56 +01:00
parent ec1fae253d
commit 673b908d16

View File

@@ -35,27 +35,31 @@ vector<int> sieve(int n){
return result;
}
vector<int> prime_terms(int n, vector<int> primes = vector<int>()){
if(primes.empty()){
primes = sieve(n);
}
vector<int> prime_terms(int n){
vector<int> 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){