Esempio n. 1
0
 public void ExtendedEuclideanAlgorithmTest(int a, int b, int expectedGcd, int expectedX, int expectedY)
 {
     var(gcd, x, y) = ExtendedEuclideanAlgorithm.GetGcd(new BigInteger(a), new BigInteger(b));
     gcd.Should().Be(expectedGcd);
     x.Should().Be(expectedX);
     y.Should().Be(expectedY);
 }
        public void TestDivMod()
        {
            Calculator <BigInteger> DivMod(Calculator <BigInteger> denominator, Calculator <BigInteger> numerator,
                                           Calculator <BigInteger> prime)
            {
                var gcd    = new ExtendedEuclideanAlgorithm <BigInteger>();
                var result = gcd.Compute(denominator, prime);

                return(numerator * result.BezoutCoefficients[0] * result.GreatestCommonDivisor);
            }

            Calculator <BigInteger> d = (BigInteger)3000;
            Calculator <BigInteger> n = (BigInteger)3000;
            Calculator <BigInteger> p = Calculator <BigInteger> .Two.Pow(127) - Calculator <BigInteger> .One;

            Assert.Equal(n, d * DivMod(d, n, p) % p);
        }