using System; using System.Linq.Expressions; namespace BigInt { public class IntField { public static IntField Default { get; set; } = null; // new IntField(UBigInteger.ZERO.Resize(256) - 1); public static IntField INFINITY { get; private set; } = new IntField(); public Integer FieldModulo { get; private set; } public IntField(UInteger p){ this.FieldModulo = p; } public IntField(Integer p){ this.FieldModulo = p; } private IntField(){ this.FieldModulo = 0; } public Integer Fit(Integer value) { if (FieldModulo.isZero()){ return value; } value %= FieldModulo; if (value.Sign()) { value += FieldModulo; } return value; } public UInteger Fit(UInteger value) { if (FieldModulo.isZero()){ return value; } value %= (UInteger)FieldModulo; return value; } public Integer AdditiveInverse(Integer value){ return FieldModulo - value; } public override string ToString(){ return String.Format("[IntField p={0}]",this.FieldModulo); } } }