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,你有几个选择:调用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 回答