Exemple #1
0
        static void Main(string[] args)
        {
            LongInteger k = new LongInteger(Console.ReadLine());
            LongInteger n = new LongInteger(Console.ReadLine());
            LongInteger s = new LongInteger("0");

            s = s.Minus(s.PowInteger(k, n), new LongInteger("1")); // k^(n)-1. Возведение в степень - быстрое, если что.
            k = s.Minus(k, new LongInteger("1"));                  // k-1.
            s = s.Divided(s, k);                                   // s/k.
            Console.WriteLine(s.x);
            Console.ReadLine();
        }
        public LongInteger PowInteger(LongInteger a, LongInteger k)
        {
            LongInteger    b   = new LongInteger("1");
            HashSet <char> hsh = new HashSet <char>();

            foreach (char i in "02468")
            {
                hsh.Add(i);
            }
            while (a.StringComparer(k.x, "0"))
            {
                if (hsh.Contains(k.x[k.x.Length - 1]))
                {
                    k = k.Divided(k, new LongInteger("2"));
                    a = a.ComplexMultiplied(a, a);
                }
                else
                {
                    k = k.Minus(k, new LongInteger("1"));
                    b = b.ComplexMultiplied(b, a);
                }
            }
            return(b);
        }