2013-04-11 43 views
-2

我已經努力了,但不能想出一種方法來做一個^(b^c)mod p出於某種原因。我能夠看到a^b^c等線程。儘管這只是一個輕微的變化,但我無法做到這一點算法 - 指數 -

這是我在Python代碼中的代碼:

DEF exponent_mod(A,b,C,M):

def modular_pow(base, exponent, modulus): 
    result = 1 
    while (exponent > 0): 
     if (exponent % 2 == 1): 
      result = (result * base) % modulus 
     exponent = exponent >> 1 
     base = (base * base) % modulus 
    return result 

m_ = modular_pow(a, b, m) 
return modular_pow(m_, c, m) 
+2

你能分享你所做的事,所以我們可以看到你要去哪裏錯了?如果你使用^符號' - 你會得到'XOR'值。 Python中求冪的運算符是雙星號'**'。 – Makoto 2013-04-11 04:24:32

+0

您正在嘗試重新發明輪子,請參閱http://www.tutorialspoint.com/python/python_basic_operators.htm – Thunderboltz 2013-04-11 04:59:51

+1

我在這裏看到的唯一障礙是,如果指數變大,您可能會遇到一些麻煩。因此,我會尋找一個分析簡化你的問題。 – pwagner 2013-04-11 07:26:05

回答

2

我看不到有效的理由有一個額外的方法(我也不瞭解比特移位的意圖或目的)。如果你試圖獲得b c mod p,那麼就直接做吧。

def modular_pow(a, b, c, p): 
    return (a**(b**c)) % p 

更有效的方式,所建議的,將使用Python's built-in pow() method:

def modular_pow(a, b, c, p): 
    return pow(a, b**c, p) 
+1

更好地做'pow(a,b ** c,p)' – Jared 2013-04-11 05:00:36