私はセージで次のことをしています:
セージ: Zp = Zmod(101) セージ: Zp(5) 5 セージ: Zp(-1) 100 セージ:Zp(100) 100
-1 = 100 mod 101 であることは理解していますが、sage が両方のインスタンスで 100 ではなく -1 を出力するようにしたいと考えています。
より一般的には、Zmod(p) で作業する場合、出力が間隔 (-p/2, p/2] 内にあることを望みます。
私はセージで次のことをしています:
セージ: Zp = Zmod(101) セージ: Zp(5) 5 セージ: Zp(-1) 100 セージ:Zp(100) 100
-1 = 100 mod 101 であることは理解していますが、sage が両方のインスタンスで 100 ではなく -1 を出力するようにしたいと考えています。
より一般的には、Zmod(p) で作業する場合、出力が間隔 (-p/2, p/2] 内にあることを望みます。
IntegerMod_int は速度向上のために Cython に実装されているため、実行時にこの動作を変更することはできません。必要な機能を取得する最も簡単な方法は、sage/rings/finite_rings/integer_mod.pyx の 1462 行目 (少なくとも、5.0-beta12 の行番号) で定義されているrepr関数を変更することです。次のようなものに置き換えます
def _repr_(self):
x = self.lift()
modulus = self.parent().modulus()
if x <= modulus // 2:
return str(x)
else:
return str(x-modulus)