Ich möchte für die Berechnung des Wertes von pow (a, b)% MOD codieren. Ich benutze C++, um zu programmieren.Berechnung (a^b)% MOD
Aber das Problem ist der Wert von b kann sehr groß sein. Ich kenne die log (b) Zeitkomplexitätsmethode. Aber der Wert von b passt möglicherweise nicht in den Datentyp "long long" von C++. Zum Beispiel kann b 1000000000 Fibonacci-Nummer sein. Die genaue Berechnung einer so großen Zahl ist selbst nicht möglich (zeitlich befristet).
P.S. :
- pow (a, b) bedeutet a * a * a * a * ... b mal.
- X% MOD bedeutet den Rest, der beim Teilen von X durch MOD erhalten wird.
möglich Duplikat von [Behandle beliebige Länge Integer in C++] (http://stackoverflow.com/questions/8146938/handle-arbitrary-length-integers-in-c) –
nur zur Klärung, in C++ '^' ist der XOR operato r, kein Exponentenoperator (Sie würden mit einigen ziemlich schlechten Ergebnissen enden, Erfahrungen aus erster Hand). Ich glaube, Sie müssen 'Math.exp (a, b)' – nbrooks
@ nbrooks verwenden: Während Sie sicherlich richtig sind, dass C++ '^' zu XOR bedeutet, sieht 'Math.exp (a, b)' nicht wie C++ (und basierend auf dem Namen würde ich erwarten, dass es die Exponentialfunktion berechnet, eine Zahl nicht zu einer Potenz erhebt). –