Updated to initial implementation using cpp.
This commit is contained in:
65
Exercises.cpp
Normal file
65
Exercises.cpp
Normal file
@@ -0,0 +1,65 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user