Ejemplo n.º 1
0
        private static void FMain()
        {
            //multiple ways to construct a BigFloat
            BigFloat bigfloat1 = new BigFloat(1234567);
            BigFloat bigfloat2 = new BigFloat("1234567");
            BigFloat bigfloat3 = new BigFloat(1234567.0);
            BigFloat bigfloat4 = BigFloat.Parse("1234567.123");


            Console.WriteLine("(1234567 * 12)^2 - 15 = \n");


            Console.WriteLine("Arithmetic:             " + (Math.Pow(1234567 * 12, 2) - 15));

            //non-static methods
            Console.WriteLine("BigFloat w/ non-static: " + bigfloat1.Multiply(12).PowerTo(2).Subtract(15));

            //static methods
            bigfloat2 = BigFloat.Multiply(bigfloat2, 12);
            bigfloat2 = BigFloat.PowerTo(bigfloat2, 2);
            bigfloat2 = BigFloat.Subtract(bigfloat2, new BigInteger(15));
            Console.WriteLine("BigFloat w/ static    : " + bigfloat2);

            //operators
            Console.WriteLine("BigFloat w/ operators : " + (((bigfloat3 * 12) ^ 2) - 15));


            Console.WriteLine();

            //additional methods
            Console.WriteLine("Round(1234567.1234)     = " + BigFloat.Round(bigfloat4));
            Console.WriteLine("Ceiling(1234567.1234)      = " + BigFloat.Ceiling(bigfloat4));
            Console.WriteLine("Floor(1234567.1234)     = " + BigFloat.Floor(bigfloat4));
            Console.WriteLine("Inverse(1234567.1234)   = " + BigFloat.Inverse(bigfloat4).ToString(20));
            Console.WriteLine("SquareRoot(1234567.1234)      = " + BigFloat.SquareRoot(bigfloat4));
            Console.WriteLine("log10(1234567.1234)     = " + BigFloat.Log10(bigfloat4));

            //large numbers
            BigFloat pi = new BigFloat("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949");

            Console.WriteLine("\nPi to a really long decimal place:");
            Console.WriteLine(pi.ToString(200));

            Console.WriteLine("\nTau (2*PI): ");
            Console.WriteLine((pi * 2).ToString(200));


            Console.Read();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// returns true for a prime number n, otherwise false
        /// </summary>
        public static bool MillerTest(BigInteger n)
        {
            if (n <= 1)
            {
                throw new ArgumentOutOfRangeException();
            }
            BigInteger d = n - 1;
            int        r = 0;

            while (d % 2 == 0)
            {
                r++;
                d /= 2;
            }
            // n = 2^r * d + 1

            BigInteger limit = BigInteger.Min(n - 2, (BigInteger)BigFloat.Ceiling(2 * BigFloat.Pow(BigFloat.Log(n), 2)));

            for (int a = 2; a < limit; a++)
            {
                BigInteger x = BigInteger.ModularPow(a, d, n);
                if (x == 1 || x == n - 1)
                {
                    continue;
                }
                bool ret = false;
                for (int count = 0; count < r - 1; count++)
                {
                    x = BigInteger.ModularPow(x, 2, n);
                    if (x == n - 1)
                    {
                        ret = true;
                        break;
                    }
                }
                if (ret)
                {
                    continue;
                }
                return(false);
            }
            return(true);
        }