Ich muss (a^b)% c für sehr große Werte von a und b berechnen können (die einzeln die Grenze drücken und Überlauffehler verursachen, wenn Sie versuchen, ein^zu berechnen b). Für klein genug Zahlen funktioniert die Verwendung der Identität (a^b)% c = (a% c)^b% c, aber wenn c zu groß ist, hilft das nicht wirklich. Ich schrieb eine Schleife manuell die Mod Operation zu tun, der eine ein zu einem Zeitpunkt:Schnelle Möglichkeit, eine Zahl manuell zu ändern
private static long no_Overflow_Mod(ulong num_base, ulong num_exponent, ulong mod)
{
long answer = 1;
for (int x = 0; x < num_exponent; x++)
{
answer = (answer * num_base) % mod;
}
return answer;
}
aber eine sehr lange Zeit in Anspruch nimmt. Gibt es einen einfachen und schnellen Weg, um diese Operation auszuführen, ohne tatsächlich die Macht von b UND ohne zeitaufwendige Schleifen zu nehmen? Wenn alles andere fehlschlägt, kann ich ein Bool-Array erstellen, um einen riesigen Datentyp darzustellen, und herausfinden, wie man das mit bitweisen Operatoren macht, aber es muss einen besseren Weg geben.
Klingt wie ein Euler Problem ... Wenn ja, sollten Sie klar Zustand das in der Frage, anstatt zu versuchen, zu betrügen ... – Guffa
Das Wissen der Reichweite von a, b und c könnte uns helfen. – Nosredna
Cheat? ......... –