我在贤哲中做了以下事情:
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)。
答案 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)