Die Summe von Vielfachen zweier Zahlen unter einem Limit



  • Hi,

    ich bin seit neustem dabei C++ zu erlernen, dabei hab ich vor ein kleines Programm zu schreiben, das genauso funktionieren soll, wie es bereits im Titel steht.

    Leider läufts nicht 😞 Könnt ihr mir helfen?

    Hier mein Quellcode:

    [spoiler]

    #include <iostream>
    
    using namespace std;
    
    int main () {
    
    	unsigned int		(iValue1, iValue2, iLimit)
    	unsigned int		i = 0;	//count
    	unsigned int		iSum = 0; // Sum
    
    	// Getting numbers
    	cout << "Listing all the natural numbers of multiples of numbers you name, below a named limit. \n \n";
    	cout << "First Value: ";	cin >> iValue1;
    	cout << "Second Value: ";	cin >> iValue2;
    	cout << "Limit: ";			cin >> iLimit;
    
    	getchar ();
    
    	while (i >/ iLimit) {
    
    		if (i % iValue1 == 0) {
    
    			iSum += i;
    
    			i++;
    
    		}
    		else if (i % iValue2 == 0) {
    
    				iSum += i;
    
    				i++;
    		}
    	}
    
    	cout << "sum: " << iSum;
    
    	getchar();
    	return 0;
    }
    

    [spoiler]



  • mir sind gerade ein paar kleine Fehler aufgefallen:

    Zeile 7 ist ohne Klammern und mit Semikolon am Ende.

    Zeile 20 Das Slash gehört da nicht hin ( wo kommt das her xD !?)

    Das Programm funktioniert trotzdem nicht.



  • Definiere "funktioniert nicht".



  • Die Summe aller Vielfachen von n von 0 bis m:
    \operatorname f\_m(n)=\sum\_{i=1}^{\left\lfloor \frac mn \right\rfloor}i n=n \sum_{i=1}^{\left\lfloor \frac mn \right\rfloor}i=\frac 12 n \left\lfloor \frac mn \right\rfloor \left\lfloor \frac mn+1 \right\rfloor

    Summe aller Vielfachen von n1 und n2 von 0 bis m sind die Summe aller Vielfachen von n1 und n2 minus die Vielfachen von n1*n2:

    \text{Lösung}=\operatorname f\_m(n\_1)+\operatorname f\_m(n\_2)-\operatorname f\_m(n\_1\cdot n_2)

    Du brauchst also gar keine Schleife.



  • kazzam schrieb:

    Zeile 7 ist ohne Klammern und mit Semikolon am Ende.

    Zeile 20 Das Slash gehört da nicht hin ( wo kommt das her xD !?)

    Aus deiner Tastatur.

    kazzam schrieb:

    Das Programm funktioniert trotzdem nicht.

    Echt? Ist ja krass.



  • hustbaer find ich auch.

    O(1) danke probier ich gleich aus

    SG1 ausgabe war iSum = 0



  • O(1) dickes danke, es funktioniert.

    iLimit--;
    
    	iSum  = 0.5 * iValue1 * (iLimit / iValue1) * ((iLimit / iValue1) + 1);
    	iSum2 = 0.5 * iValue2 * (iLimit / iValue2) * ((iLimit / iValue2) + 1);
    	iSum3 = 0.5 * (iValue1 * iValue2) * (iLimit / (iValue1 * iValue2)) * ((iLimit / (iValue1 * iValue2)) + 1);
    	iSum4 = iSum + iSum2 - iSum3;
    

    wenn ich es nun doch mit 'ner Schleife machen wollen würde, wie würdes es aussehen, bzw. was hab ich falsch gemacht bei der Schleife? Oder kann man das nicht mit 'ner Schleife lösen 😕



  • while (i > iLimit)
    

    Welchen Wert hat i am Anfang? Welchen Wert iLimit (UN 😞 )? Was heißt das für die Bedingung?



  • Nathan schrieb:

    while (i > iLimit)
    

    Welchen Wert hat i am Anfang? Welchen Wert iLimit (UN 😞 )? Was heißt das für die Bedingung?

    sch**** ist das bitter 😃 😃
    oh man, oh man.. ok hab das > gedreht



  • O(1) schrieb:

    Die Summe aller Vielfachen von n von 0 bis m:
    \operatorname f\_m(n)=\sum\_{i=1}^{\left\lfloor \frac mn \right\rfloor}i n=n \sum_{i=1}^{\left\lfloor \frac mn \right\rfloor}i=\frac 12 n \left\lfloor \frac mn \right\rfloor \left\lfloor \frac mn+1 \right\rfloor

    vllt. n bissl viel verlangt, aber könntest du den letzten Schritt erklären 🙂

    In meiner Raserei gefangen, endlich das "Programm" zum Laufen zu bringen, hab ich es einfach abgetippt und leider noch nicht so ganz verstanden..



  • Das ist die gausssche Summenformel.


Anmelden zum Antworten