56 lines
1.0 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
}
|