private static BigInteger Stirling_Calculate(BigInteger n, BigInteger k)
        {
            //(-1)^i(kCi)(k-i)^n = sum/k!
            BigInteger constant = -1;
            BigInteger i;
            BigInteger sum = 0;

            for (i = 0; i < k; i++)
            {
                //Console.WriteLine(PnC.PowerCalculator(constant, i) * PnC.nCr(k, i) * PnC.PowerCalculator(k-i, n));
                sum = sum + (PnC.PowerCalculator(constant, i) * PnC.nCr(k, i) * PnC.PowerCalculator(k - i, n));
            }
            //sum/k factorial
            return(sum / PnC.Factorial(k));
        }
        public void StirlingNumber()                                                                                                                    //STIRLING
        {
            base.Stirlingsign();
            BigInteger n;

stirling_n:
            Console.Write("Enter n: ", Color.White);
            String inp  = Console.ReadLine();
            bool   cont = true;

            while (cont)
            {
                if (inp.Trim() == "" || inp == " ")
                {
                    Console.Clear();
                    base.Stirlingsign();
                    Console.WriteLine("Value of 'n' should be greater than 0 and less than 500", Color.White);
                    goto stirling_n;
                }
                else if (reg.Match(inp).Success)
                {
                    Console.Clear();
                    base.Stirlingsign();
                    Console.WriteLine("Value of 'n' should be greater than 0 and less than 500", Color.White);
                    goto stirling_n;
                }
                else
                {
                    n = BigInteger.Parse(inp);
                    if (n <= 500 && n > 0)
                    {
                        break;
                    }
                    else
                    {
                        Console.Clear();
                        base.Stirlingsign();
                        Console.WriteLine("Value of 'n' should be greater than 0 and less than 500", Color.White);
                        goto stirling_n;
                    }
                }
            }
            Console.Clear();
            base.Stirlingsign();
            n = BigInteger.Parse(inp);
            BigInteger k;

            Console.WriteLine("Value of n: " + n, Color.White);
stirling_k:
            Console.Write("Enter r: ", Color.White);
            String inp2 = Console.ReadLine();

            while (cont)
            {
                if (inp2.Trim() == "" || inp2 == " ")
                {
                    Console.Clear();
                    base.Stirlingsign();
                    Console.WriteLine("Value of n: " + n, Color.White);
                    Console.WriteLine("Value of 'k' should be greater than 0, less than 500 and 'n' should be greater or equal to 'k'", Color.White);
                    goto stirling_k;
                }
                else if (reg.Match(inp2).Success)
                {
                    Console.Clear();
                    base.Stirlingsign();
                    Console.WriteLine("Value of n: " + n, Color.White);
                    Console.WriteLine("Value of 'k' should be greater than 0, less than 500 and 'n' should be greater or equal to 'k'", Color.White);
                    goto stirling_k;
                }
                else
                {
                    k = BigInteger.Parse(inp2);
                    if (k <= 500 && k > 0 && n >= k)
                    {
                        break;
                    }
                    else
                    {
                        Console.Clear();
                        base.Stirlingsign();
                        Console.WriteLine("Value of n: " + n, Color.White);
                        Console.WriteLine("Value of 'k' should be greater than 0, less than 500 and 'n' should be greater or equal to 'k'", Color.White);
                        goto stirling_k;
                    }
                }
            }
            k = BigInteger.Parse(inp2);
            Console.Clear();
            base.Stirlingsign();
            Console.WriteLine("Value of n: " + n, Color.White);
            Console.WriteLine("Value of k: " + k, Color.White);
            Console.Write("S({0},{1}) is: ", n, k, Color.White);
            Console.Write(String.Format("{0:#,##0}", PnC.Stirling_method(n, k)), Color.IndianRed);
            Console.WriteLine();
            Choice();
        }
        public void Combination()                                                                                                                      //COMBI
        {
            base.Combinationsign();
            BigInteger n;

combi_n:
            Console.Write("Enter n: ", Color.White);
            String inp  = Console.ReadLine();
            bool   cont = true;

            while (cont)
            {
                if (inp.Trim() == "" || inp == " ")
                {
                    Console.Clear();
                    base.Combinationsign();
                    Console.WriteLine("Value of 'n' should be greater than 0 and less than 500", Color.White);
                    goto combi_n;
                }
                else if (reg.Match(inp).Success)
                {
                    Console.Clear();
                    base.Combinationsign();
                    Console.WriteLine("Value of 'n' should be greater than 0 and less than 500", Color.White);
                    goto combi_n;
                }
                else
                {
                    n = BigInteger.Parse(inp);
                    if (n <= 500 && n > 0)
                    {
                        break;
                    }
                    else
                    {
                        Console.Clear();
                        base.Combinationsign();
                        Console.WriteLine("Value of 'n' should be greater than 0 and less than 500", Color.White);
                        goto combi_n;
                    }
                }
            }
            Console.Clear();
            base.Combinationsign();
            n = BigInteger.Parse(inp);
            BigInteger r;

            Console.WriteLine("Value of n: " + n, Color.White);
combi_r:
            Console.Write("Enter r: ", Color.White);
            String inp2 = Console.ReadLine();

            while (cont)
            {
                if (inp2.Trim() == "" || inp == " ")
                {
                    Console.Clear();
                    base.Combinationsign();
                    Console.WriteLine("Value of n: " + n, Color.White);
                    Console.WriteLine("Value of 'r' should be less than 500 and 'n' should be greater or equal to 'r'", Color.White);
                    goto combi_r;
                }
                else if (reg.Match(inp2).Success)
                {
                    Console.Clear();
                    base.Combinationsign();
                    Console.WriteLine("Value of n: " + n, Color.White);
                    Console.WriteLine("Value of 'r' should be less than 500 and 'n' should be greater or equal to 'r'", Color.White);
                    goto combi_r;
                }
                else
                {
                    r = BigInteger.Parse(inp2);
                    if (r <= 500 && n >= r)
                    {
                        break;
                    }
                    else
                    {
                        Console.Clear();
                        base.Combinationsign();
                        Console.WriteLine("Value of n: " + n, Color.White);
                        Console.WriteLine("Value of 'r' should be less than 500 and 'n' should be greater or equal to 'r'", Color.White);
                        goto combi_r;
                    }
                }
            }
            r = BigInteger.Parse(inp2);
            Console.Clear();
            base.Combinationsign();
            Console.WriteLine("Value of n: " + n, Color.White);
            Console.WriteLine("Value of r: " + r, Color.White);
            Console.Write("Combination of " + n + " and " + r + " with repetition is: ", Color.White);
            Console.Write(String.Format("{0:#,##0}", PnC.nCrWR(n, r)), Color.IndianRed);
            Console.WriteLine();
            Choice();
        }