From c70572f1b9e4ec81a0b72ec85205df0aadfff244 Mon Sep 17 00:00:00 2001 From: "jakob.schratter" Date: Wed, 22 Oct 2025 15:22:07 +0200 Subject: [PATCH] Upload files to "ex1C_summation_of_specified_numbers" --- ex1C_summation_of_specified_numbers/main.cpp | 31 +++++++++++++++++++ .../special_sum.cpp | 28 +++++++++++++++++ .../special_sum.h | 5 +++ 3 files changed, 64 insertions(+) create mode 100644 ex1C_summation_of_specified_numbers/main.cpp create mode 100644 ex1C_summation_of_specified_numbers/special_sum.cpp create mode 100644 ex1C_summation_of_specified_numbers/special_sum.h diff --git a/ex1C_summation_of_specified_numbers/main.cpp b/ex1C_summation_of_specified_numbers/main.cpp new file mode 100644 index 0000000..f469cd2 --- /dev/null +++ b/ex1C_summation_of_specified_numbers/main.cpp @@ -0,0 +1,31 @@ +#include "special_sum.h" +#include "../utils/timing.h" +#include +#include +#include +using namespace std; + +int main(int argc, char **argv) +{ + // check results and compare speeds + for(size_t n : {15, 1001, 1432987}) + { + cout << "n = " << n << endl; + size_t sum_1, sum_2; + + tic(); + for(size_t i = 0; i < 1000; ++i) + sum_1 = special_sum_loop(n); + double time_1 = toc(); + + tic(); + for(size_t i = 0; i < 1000; ++i) + sum_2 = special_sum_noloop(n); + double time_2 = toc(); + + cout << "loop: " << sum_1 << "\t\tDuration: " << time_1 << endl; + cout << "no loop: " << sum_2 << "\t\tDuration: " << time_2 << endl << "---------------------------------------------------" << endl; + } + + return 0; +} diff --git a/ex1C_summation_of_specified_numbers/special_sum.cpp b/ex1C_summation_of_specified_numbers/special_sum.cpp new file mode 100644 index 0000000..d2860ff --- /dev/null +++ b/ex1C_summation_of_specified_numbers/special_sum.cpp @@ -0,0 +1,28 @@ +#include "special_sum.h" + +size_t gauss_sum(size_t n) +{ + return (n*(n+1))/2; +} + +size_t special_sum_loop(size_t n) +{ + size_t sum = 0; + for (size_t i = 1; i < n+1; ++i) + { + if (i % 3 == 0 || i % 5 == 0) + { + sum += i; + } + } + return sum; +} + +size_t special_sum_noloop(size_t n) +{ + size_t factor_3 = gauss_sum(n/3); // dividing int by int automatically gets rounded off + size_t factor_5 = gauss_sum(n/5); + size_t factor_15 = gauss_sum(n/15); + + return factor_3*3 + factor_5*5 - factor_15*15; +} \ No newline at end of file diff --git a/ex1C_summation_of_specified_numbers/special_sum.h b/ex1C_summation_of_specified_numbers/special_sum.h new file mode 100644 index 0000000..49d579a --- /dev/null +++ b/ex1C_summation_of_specified_numbers/special_sum.h @@ -0,0 +1,5 @@ +#include + +size_t special_sum_loop(size_t n); + +size_t special_sum_noloop(size_t n); \ No newline at end of file