Zmod中的负数?

时间:2012-03-22 12:58:38

标签: sage

我在贤哲中做了以下事情:

sage: Zp = Zmod(101)
sage: Zp(5)
5
sage: Zp(-1)
100
sage: Zp(100)
100

我理解-1 = 100 mod 101,但我希望sage在两个实例中输出-1而不是100。

更一般地说,在Zmod(p)中工作时,我希望输出在区间(-p / 2,p / 2)。

1 个答案:

答案 0 :(得分:2)

由于IntegerMod_int是在Cython中实现的,因此无法在运行时更改此行为。获得所需功能的最简单方法是更改​​在sage / rings / finite_rings / integer_mod.pyx第1462行定义的 repr 函数(至少,这是5.0-beta12中的行号)。用

之类的东西替换它
def _repr_(self):
    x = self.lift()
    modulus = self.parent().modulus()
    if x <= modulus // 2:
        return str(x)
    else:
        return str(x-modulus)