From ff2fb3cca4f2d2cc6d9aea3e7493420cb5bbb441 Mon Sep 17 00:00:00 2001 From: "lisa.pizzo" Date: Wed, 22 Oct 2025 16:00:44 +0200 Subject: [PATCH] Exercise 3, Sheet 1 --- mainEx3.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 mainEx3.cpp diff --git a/mainEx3.cpp b/mainEx3.cpp new file mode 100644 index 0000000..94b606b --- /dev/null +++ b/mainEx3.cpp @@ -0,0 +1,52 @@ +#include +#include +using namespace std; +using namespace std::chrono; + +long long sumMultiplesLoop(int n) { // long long is like int but for big numbers + long long sum = 0; + for (int i = 1; i <= n; ++i) { + if (i % 3 == 0 || i % 5 == 0) { + sum += i; + } + } + return sum; +} + +long long sumOfMultiples(int n, int k) { //known formula: k*m*(m+1)/2 for multiples of k leq n + long long m = n / k; // how many multiples + return (long long)k * m * (m + 1) / 2; +} + +// Formula version (no loop) +long long sumMultiplesFormula(int n) { + return sumOfMultiples(n, 3) + sumOfMultiples(n, 5) - sumOfMultiples(n, 15); //subtract multiples of 15 because they count double +} + +int main() { + int n = 1432987; + + auto start1 = high_resolution_clock::now(); + long long result1 = 0; + for (int i = 0; i < 1000; ++i) { + result1 = sumMultiplesLoop(n); + } + auto end1 = high_resolution_clock::now(); + duration average1 = (end1 - start1) / 1000; + + auto start2 = high_resolution_clock::now(); + long long result2 = 0; + for (int i = 0; i < 1000; ++i) { + result2 = sumMultiplesFormula(n); + } + auto end2 = high_resolution_clock::now(); + duration average2 = (end2 - start2) / 1000; + + cout << "Loop result: " << result1 << endl; + cout << "Loop average time: " << average1.count() << " seconds" << endl; + cout << "Formula result: " << result2 << endl; + cout << "Formula average time: " << average2.count() << " seconds" << endl; + + return 0; +} +