Primzahlenberechnung?



  • Hallo,

    ich habe einen Codeschnipsel, der die Primzahlen berechnet (es geht um Operationsüberladung glaub ich)

    void Natural::printPrimes() const
    {
    	Natural counter = 2;
    	Natural tmpValue = value;
    	while (tmpValue.getValue() > counter.getValue())
    	{
    		if(0 == (tmpValue % counter))
    		{
    			cout << counter.getValue() << " ";
    			tmpValue = tmpValue / counter;
    			continue;
    		}
    		counter = counter + 1;
    	}
    	cout << tmpValue.getValue();
    }
    

    Kann mir jemand erklären, was genau da passiert?



  • Natural Natural::crossSum(const Natural& number) const
    {
    	if (number.getValue() < 10)
    		return number;
    	return crossSum(crossSum(number/10)+(number%10));
    }
    

    Versteh ich auch net 😕



  • So wie ich das verstehe, gibt dir die erste Methode aus, durch welche Zahlen tmpValue teilbar ist. Die Suche beginnt für count = 2 als möglichen Teiler. Sobald tmpValue durch count teilbar ist, wird sie auch dadurch geteilt, um weniger Rechenoperationen zu benötigen.



  • mir ist vor allem dieser Teil nicht ganz klar:

    if(0 == (tmpValue % counter))
            {
                cout << counter.getValue() << " ";
                tmpValue = tmpValue / counter;
                continue;
            }
            counter = counter + 1;
        }
        cout << tmpValue.getValue();
    

    es wird geprüft ob tmpvalue % counter gleich null ist und dann tmpvalue durch counter geteilt und das ganze dann sofort von vorne ohne das der rest der schleife durchlaufen wird ? wozu?

    und was ist mit der anderen Funktion?



  • Gunnar_FH schrieb:

    es wird geprüft ob tmpvalue % counter gleich null ist und dann tmpvalue durch counter geteilt und das ganze dann sofort von vorne ohne das der rest der schleife durchlaufen wird ? wozu?

    Weil es sein kann, dass der Wert mehrmals durch denselben Primfaktor teilbar ist.

    und was ist mit der anderen Funktion?

    Die bildet die Quersumme, indem sie die Zahl zerlegt. Die letzte Stelle (number % 10) wird zur Quersumme der übrigen Stellen (rekursiver Aufruf mit number / 10) addiert.



  • könntest Du mir das eventuell an der Zahl 9992 erläutern? Also die einzelnen Schritte bei beiden funktionen?



  • Lass dir doch die einzelnen Schritte in der Schleife ausgeben, dann kannst du es selbst nachvollziehen.



  • Hm..? ich kriegs net mal im debuger hin *total überfordert* 😢



  • Sollst ja auch nicht den Debugger nehmen. Lauf die Schleife durch und lass dir mittels cout die Variablen an den geeigneten Stellen auf der Konsole ausgeben. Dann siehst du was dort passiert.


Anmelden zum Antworten