65 lines
1.6 KiB
C++
65 lines
1.6 KiB
C++
#include <iostream>
|
|
#include <vector>
|
|
#include "Exercises.h"
|
|
|
|
// Gives multiple of all multiples of 3 or 5 under given number.
|
|
int Ex1(int in) {
|
|
int out = 0;
|
|
|
|
for (int i = 3; i < in; i += 3) out += i;
|
|
for (int i = 5, t = 1; i < in; i += 5, t++) {
|
|
if (t == 3) t = 0;
|
|
else out += i;
|
|
}
|
|
return out;
|
|
}
|
|
|
|
// Gives multiple of all even fibonacci sequence values under given number
|
|
int Ex2(int in) {
|
|
int v1 = 0, v2 = 1, f = 0, out = 0;
|
|
while (true) {
|
|
// calc fibonacci value
|
|
f = v1 + v2;
|
|
v1 = v2;
|
|
v2 = f;
|
|
|
|
// stop if fibonacci value over max
|
|
if (in < f) break;
|
|
// skip if uneven
|
|
if ((f & 0b1) == 1) continue;
|
|
|
|
// sum
|
|
out += f;
|
|
}
|
|
return out;
|
|
}
|
|
|
|
/*
|
|
Works but needs to be optimised for large number: 600851475143
|
|
*/
|
|
// Gives biggest prime factor of given number
|
|
unsigned long long Ex3(unsigned long long in) {
|
|
vector<unsigned long long> primes = { 2 };
|
|
unsigned long long biggest_prime = -1;
|
|
|
|
for (unsigned long long num = 2; num <= in; num++)
|
|
{
|
|
// Find prime
|
|
bool isPrime = true;
|
|
for (auto prime : primes)
|
|
{
|
|
isPrime = num % prime != 0;
|
|
if (!isPrime) break;
|
|
}
|
|
if (!isPrime) continue;
|
|
primes.push_back(num);
|
|
|
|
// Is number factor of input, if not go to next number.
|
|
if (in % num != 0) continue;
|
|
|
|
// Save current prime as biggest prime and promote other factor as new max.
|
|
biggest_prime = num;
|
|
in = in / num;
|
|
}
|
|
return biggest_prime;
|
|
} |