2014-05-20 15 views
6

Sto cercando di calcolare alcuni num1**num2 in Python. Ma il problema è cheè 93192289535368032L e num2 è 84585482668812077L, che sono numeri molto grandi.pow o ** per un numero molto grande in Python

Ho provato diversi metodi come segue: Innanzitutto, ho provato a calcolarlo utilizzando l'operatore **. Ma ci è voluto troppo tempo (ho aspettato circa 2 ore, ma non ho ottenuto alcun risultato).

In secondo luogo, ho usato math.pow(num1, num2). Ma ho ottenuto questo:

Traceback (most recent call last): File "<pyshell#23>", line 1, in <module> 
    math.pow(84585482668812077L, 93192289535368032L) 
OverflowError: math range error 

Infine, ho usato numpy.power:

numpy.power(84585482668812077, 93192289535368032) 
-9223372036854775808 

Come vedete, mi ha dato meno.

Quello che voglio veramente fare è result = (num1**num2) e poi lo result % num3. Quindi, ho bisogno di calcolare questo valore di potenza in modo efficiente.

Come posso fare questo?

+2

Dal momento che si sta facendo '(num1 num2 **)% num3', si dovrebbe esaminare la generalizzazione del' di Fermat Litte Theorem'. Cercalo su wikipedia – sshashank124

+0

@ sshashank124 Grazie per il buon riferimento. – GoodGJ

risposta

12

Si dovrebbe passare num3 come il terzo parametro per pow

 
pow(...) 
    pow(x, y[, z]) -> number 

    With two arguments, equivalent to x**y. With three arguments, 
    equivalent to (x**y) % z, but may be more efficient (e.g. for longs). 
+0

Grazie. Penso di dover importare "matematica" per l'utilizzo di Pow. Ma c'è il pow di default in Python stesso. – GoodGJ

+0

Cosa c'è di sbagliato nell'importazione della libreria matematica? –

+7

Non si vuole importare 'pow' da' math'-- è C 'pow', che non accetta il terzo argomento. – DSM

Problemi correlati