public Rational(long numerator, long denominator)
        {
            var gcd = EulerMath.GCD(numerator, denominator);
            var denominatorNegativeFactor = denominator > 0 ? 1 : -1;

            Numerator   = denominatorNegativeFactor * numerator / gcd;
            Denominator = denominatorNegativeFactor * denominator / gcd;
        }
Exemple #2
0
        public RationalBigInteger(BigInteger numerator, BigInteger denominator)
        {
            var gcd = EulerMath.GCD(numerator, denominator);
            var denominatorNegativeFactor = denominator > 0 ? 1 : -1;

            Numerator   = denominatorNegativeFactor * numerator / gcd;
            Denominator = denominatorNegativeFactor * denominator / gcd;
        }
        public ResidueClass Chinese(ResidueClass other)
        {
            var(u, _, gcd) = EulerMath.ExtendedEuclidean(Modulus, other.Modulus);
            var lcm = Modulus / gcd * other.Modulus;

            if (Value % gcd != other.Value % gcd)
            {
                throw new ArgumentException("Geen oplossing");
            }

            var l = (Value - other.Value) / gcd;

            return(new ResidueClass(Value - Modulus * u * l, lcm));
        }
Exemple #4
0
 public void GreatestCommonFactor()
 {
     Assert.AreEqual(8, EulerMath.GreatestCommonFactor(8, 16));
     Assert.AreEqual(1, EulerMath.GreatestCommonFactor(7, 51));
 }
Exemple #5
0
 public void Factorial4()
 {
     Assert.AreEqual(new BigInteger(24), EulerMath.Factorial(4));
 }
Exemple #6
0
 public void Factorial10()
 {
     Assert.AreEqual(new BigInteger(3628800), EulerMath.Factorial(10));
 }