sharp-biginteger/IntField.cs

56 lines
1.0 KiB
C#
Raw Permalink Normal View History

2017-10-17 21:49:51 +02:00
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);
2017-10-23 12:11:40 +02:00
public static IntField INFINITY { get; private set; } = new IntField();
2017-10-17 21:49:51 +02:00
2017-10-23 12:11:40 +02:00
public Integer FieldModulo { get; private set; }
2017-10-17 21:49:51 +02:00
2017-10-23 12:11:40 +02:00
public IntField(UInteger p){
2017-10-17 21:49:51 +02:00
this.FieldModulo = p;
}
2017-10-23 12:11:40 +02:00
public IntField(Integer p){
2017-10-17 21:49:51 +02:00
this.FieldModulo = p;
}
2017-10-23 12:11:40 +02:00
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;
}
2017-10-17 21:49:51 +02:00
public override string ToString(){
return String.Format("[IntField p={0}]",this.FieldModulo);
}
}
}