sharp-biginteger/IntField.cs

56 lines
1.0 KiB
C#

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);
}
}
}