Fakultäten aufsummieren.

Ev385

Grünschnabel
Hallo,

ich möchte ein Programm schreiben, der in der Lage ist Fakultäten aufzusummieren und zwar nicht Schritt für
Schritt (1! , 2!, 3!, 4!.....), sondern nach jedem zweiten Schritt in ungeraden Schritten( 1! , 3!, 5!, 7!......).
Ich wollte das mit einer For-Schleife machen, aber ich weiß nicht so recht, was ich in die Schleife schreiben soll,
damit diese Folge ausgeführt wird.
Kann mir dort bitte jemand einen Ansatz geben.

Gruß.
Ev385

Ich schreibe in C :D
 
Zuletzt bearbeitet von einem Moderator:

sheel

I love Asm
Hi

Eine for-Schleife, die immer zwei weitergeht, ist nicht schwer, zB.
Code:
for(i = 1; i <= irgendwas; i += 2)

Und weil zB. 7! aber noch immer 5! * 6* 7 ist, nicht nur 5! * 7, müssen in der Schleife sowohl i als auch i+1 zum aktuellen Wert dazumultipliziert werden.
 

Technipion

Erfahrenes Mitglied
Hallo Ev385,
behalte aber bitte im Hinterkopf, dass Fakultäten sehr schnell sehr groß werden, und du dann womöglich in einen Overflow rennst. Ein 64-Bit Integer kann z.B. 21! nicht mehr darstellen. Bei einem 1024-Bit Integer ist bei 171! Schluss.
Falls du trotzdem mit großen Zahlen arbeiten möchtest, gibt es jede Menge Bibliotheken dafür. Hier ist z.B. eine davon: https://gmplib.org/ .

Außerdem kannst du die Berechnungen massiv optimieren, wenn du den von sheel genannten Ansatz noch etwas ausbaust.

Gruß Technipion
 

Ev385

Grünschnabel
Habe endlich eine mögliche Lösung gefunden, die meine Reihe beschreibt :D. Hier summiert er nur 1! und 3!. Man kann es noch ausschmücken.
Meine Frage wäre noch, ob es noch einfacher geht das darzustellen.

C:
int main (){
 int produkt = 1;
 int i;

 for (i=1; i<=3; i=i+2){
   
    produkt = produkt*i*(i-1)+1;
    if (produkt > 1){
       
        produkt = produkt - 1;
    }
   
}


printf("%d", produkt);   
[/ code]
 

sheel

I love Asm
Eigentlich summierst du da kein 1! und 3!, du berechnest einfach nur 3! :rolleyes:
(Ergebnis 6. Die Summe wäre 7).

Die ganze Sache mit +1/if/-1 ist nur nötig, weil *(i-1) im ersten Durchgang *0 ist und man ohne das +1 durch Multiplikationen nie wieder von 0 weg kommt. Da 1! 1 ergibt und produkt am Anfang ja auf 1 gesetzt wird (und für 1! die ganze Schleife daher eigentlich nicht nötig ist), könnte man die Schleife erst am 3 beginnen und dafür die Sonderbehandlung weglassen:
Code:
for (i=3; i<=3; i=i+2){
    produkt = produkt*i*(i-1);
}

Und wenn du die Summe noch willst, am Anfang noch ein "int sum=0", und dann in der Schleife produkt dazuaddieren...
 
Zuletzt bearbeitet:

Ev385

Grünschnabel
Ja für den ersten Durchgang musste ich tricksen, da ich sonst immer null herausbekommen hätte. :D.
Aber dann mit i=3 zu beginnen ist noch besser. Danke :D. Das Problem bei mir ist einfach auf diese Idee mal zu kommen.