Exemple #1
0
        public void Solve()
        {
            var a = sc.Long();
            var b = sc.Long();

            ModInteger.Mod = sc.Integer();
            var mat = new ModMatrix(2, 2);

            mat[0, 0] = 10;
            mat[0, 1] = 1;
            mat[1, 1] = 1;
            var vec = new ModMatrix(2, 1);

            vec[0, 0] = 1;
            vec[0, 1] = 1;

            var gcd = MathEx.GCD(a, b);
            var A   = (ModMatrix.Pow(mat, a - 1) * vec)[0, 0];

            mat[0, 0] = ModInteger.Pow(10, gcd);

            var B = (ModMatrix.Pow(mat, b / gcd - 1) * vec)[0, 0];

            IO.Printer.Out.WriteLine(A * B);
            //IO.Printer.Out.WriteLine(A * B * ModInteger.Inverse(GCD));
        }
Exemple #2
0
        public override IEnumerable <object> Solve(TextReader inputStream)
        {
            var(n, k) = inputStream.ReadValue <int, long>();
            var initialVector = new ModVector(Enumerable.Repeat(Modular.One, n).ToArray());
            var matrix        = new ModMatrix(n);

            for (int i = 0; i < n; i++)
            {
                var a = inputStream.ReadIntArray();
                for (int j = 0; j < n; j++)
                {
                    matrix[i, j] = a[j];
                }
            }

            var resultVector = matrix.Pow(k) * initialVector;

            var result = Modular.Zero;

            for (int i = 0; i < resultVector.Length; i++)
            {
                result += resultVector[i];
            }

            yield return(result);
        }