0

問題は、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
4

1 に答える 1

0

e再び に戻したい場合Integerは、いくつかのオプションがあります: call Integer(ターゲット オブジェクト)、またはZZIntegerRingターゲットの親です。

sage: e
1
sage: parent(e)
Ring of integers modulo 6
sage: ZZ(e)
1
sage: parent(ZZ(e))
Integer Ring

など:

sage: e = ZZ(e)
sage: e/2
1/2
sage: e//2
0

またはあなたが望むものは何でも。

于 2013-11-09T20:36:48.510 に答える