示例#1
0
        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));
            }
        }
示例#2
0
        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);
        }