2013-04-11 45 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