問題は、2 が整数モード リング (6) で可逆でないことです。結果を通常の整数として 2 に分割したいと思います。つまり、整数モード リングのトラップから抜け出し、結果を通常の整数にしてから 2 で割るのが好きです。
def fast_exponentiation(c, L, q):
Zq = IntegerModRing(q) # create Z_q
g2 = c
result = 1
while True:
y = L % 2
result = Zq(result) * Zq(g2 ** y)
g2 = Zq(g2 * g2)
L = L >> 1
if L == 0:
break
return result
e = fast_exponentiation(2, 4, 6)
print e / 2