2016-12-15 7 views
-5

Ich möchte große mathematische Operation in C++.Große mathematische Operation C++

long long h= 4294967295; 
long long d=7910266469; 
long long n=10021211227; 
long long result; 

Ich bin brauchen berechnen dies:

h^d mod n

result=pow(h,d) % n; 

Ich weiß nicht, welche Art using.Please mir helfen, für Typ-Nummern wählen .. Dank

+0

Ich benutze Dev-C++ –

+0

Fehler: Ergebnis muss doppelt Typ sein –

+5

Sie das tun sollten Mathe zuerst. Vielleicht gibt es einen Zahlentyp, der es dir erlaubt, 'pow (h, d)' zu machen, aber da du das Ergebnis nur für Mod 'n' brauchst, brauchst du nicht unbedingt 'pow (h, d)'. Natürlich gibt es Identitäten, die Sie verwenden können, um die Berechnung mit "long long" machbar zu machen, ich kenne sie einfach nicht auswendig;) – user463035818

Antwort

1

Blick auf this wikipedia article. Es ist ein ziemlich schönes Beispiel mit dem folgenden speichereffizienten Pseudo-Code:

function modular_pow(base, exponent, modulus) 
    if modulus = 1 then return 0 
    c := 1 
    for e_prime = 1 to exponent 
     c := (c * base) mod modulus 
    return c 

Es gibt sogar ein Beispiel für beeing speichereffizient und weniger Operationen. Ich denke, es sollte möglich sein, den C++ - Code zu bekommen.

Wenn Sie diese Methode verwenden, sollte long long für Ihre Lösung in Ordnung sein.


getestet Nicht aber eine einfache 1: 1 Übersetzung aus dem Pseudo-Code von oben ...

long long result = 1; 
int i; 
for(i=0; i<d;i++){ 
    result = (result * h) % n; 
} 
+0

Dieser Code andere Programmiersprache Ich bin schlecht in C++ konvertieren. –

+0

Entschuldigung mein Englisch –

+0

Vielleicht sollte ich beachten, dass für große "d" die Berechnung wirklich sehr lange dauern wird – izlin

Verwandte Themen