C: Geht das auch einfacher?

b2c1

Neues Mitglied
Mein Code:
C:
#include <stdio.h>

void tSumme(int nZahl) {

  int summe = 0;

  for (int zahl = 1; zahl <= 100; zahl++) {

    if (zahl % nZahl == 0) {
      summe += zahl;
      printf("%d\n", zahl);
    }
  }
  printf("\nSumme aller Teilbaren Zahlen: %d\n", summe);
}

int main() {

  int nZahl;
  printf("\nBitte eine Zahl eingeben: ");
  scanf_s("%d", &nZahl);

  tSumme(nZahl);

  return 0;
}

Mich würde interessieren ob es auch einfacher gehen würde.
 
Wenn ich jetzt nicht irre, ist das doch dasselbe, als würdest du alle Vielfache von \( n \) aufeinander summieren?

chatty got my back:
#include <stdio.h>

int sumOfMultiples(int n, int c) {
  int sum = 0;

  // Iterate through multiples of n up to c
  for (int i = n; i <= c; i += n) {
    sum += i;
  }

  return sum;
}

int main() {
  int n, c;

  // Input values for n and c
  printf("Enter the value of n: ");
  scanf("%d", &n);

  printf("Enter the upper bound c: ");
  scanf("%d", &c);

  // Calculate and print the sum of multiples
  int result = sumOfMultiples(n, c);
  printf("The sum of multiples of %d up to %d is: %d\n", n, c, result);

  return 0;
}

Geht aber noch besser mit der Gaußschen Summenformel:
int sumOfMultiples(int n, int c) { return n * (c / n) * (c / n + 1) / 2; }
Es sieht hier zwar auf den ersten Blick so aus, als könne man ein \( n \) wegkürzen, aber da steckt implizit noch ein Abrunden drin, daher geht die Formel leider nicht noch kürzer.
\[ \begin{align*} \text{sumOfMultiples}(n,c) &= \sum_{i=1}^{\left\lfloor\frac{c}{n}\right\rfloor} i\cdot n\\ &=n\cdot \frac{\left\lfloor\frac{c}{n}\right\rfloor \cdot\left(\left\lfloor\frac{c}{n}\right\rfloor + 1\right)}{2} \end{align*} \]
 
Zuletzt bearbeitet:
Zurück
Oben Unten