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); }