public static Modular Pow(Modular a, int n) { switch (n) { case 0: return(1); case 1: return(a); default: var p = Pow(a, n / 2); return(p * p * Pow(a, n % 2)); } }
public void Solve() { HashSet <long> primes = Primes(1000); Dictionary <long, long> count = new Dictionary <long, long>(); for (int i = 0; i < N; i++) { Dictionary <long, int> localCount = new Dictionary <long, int>(); long t = A[i]; foreach (long prime in primes) { while (t % prime == 0) { if (localCount.ContainsKey(prime)) { localCount[prime]++; } else { localCount.Add(prime, 1); } t /= prime; } } if (localCount.ContainsKey(t)) { localCount[t]++; } else { localCount.Add(t, 1); } foreach (KeyValuePair <long, int> VARIABLE in localCount) { if (!count.ContainsKey(VARIABLE.Key)) { count.Add(VARIABLE.Key, VARIABLE.Value); } else { if (count[VARIABLE.Key] < VARIABLE.Value) { count[VARIABLE.Key] = VARIABLE.Value; } } } } Modular sum = 1; foreach (KeyValuePair <long, long> l in count) { for (int i = 0; i < l.Value; i++) { sum = sum * l.Key; } } Modular ans = 0; for (int i = 0; i < N; i++) { Modular ai = A[i]; ans += sum / ai; } Console.WriteLine((int)ans); }