public override IEnumerable <object> Solve(TextReader inputStream) { var n = inputStream.ReadInt(); var a = inputStream.ReadIntArray(); Modular lcm = new Modular(1); for (int i = 1; i < a.Length; i++) { lcm = new Modular(Lcm(lcm.Value, a[i])); } var sum = new Modular(0); foreach (var v in a) { sum += lcm / new Modular(v); } yield return(sum.Value); }
public override IEnumerable <object> Solve(TextReader inputStream) { var n = inputStream.ReadInt(); var a = inputStream.ReadIntArray(); var primes = new Dictionary <int, int>(); foreach (var ai in a) { foreach (var prime in PrimeFactorization(ai)) // 素数, 個数のペア { if (primes.ContainsKey(prime.Key)) { primes[prime.Key] = Math.Max(primes[prime.Key], prime.Value); } else { primes[prime.Key] = prime.Value; } } } Modular lcm = new Modular(1); foreach (var prime in primes) { lcm *= Modular.Pow(new Modular(prime.Key), prime.Value); } var sum = new Modular(0); foreach (var v in a) { sum += lcm / new Modular(v); } yield return(sum.Value); }