Beispiel #1
0
        public void Solve()
        {
            Modular ans = 1;

            Modular factN = Modular.Fac((int)N);

            // iは結果に含まれる0の数
            for (int i = 1; i <= N - 1; i++)
            {
                // Kが足りないので0を作れない
                if (i > K)
                {
                    break;
                }

                // Kの偶奇を考慮しない部屋の分割方法
                Modular b = Modular.Ncr((int)N - 1, (int)N - i - 1);

                // Console.WriteLine();
                // Console.WriteLine(i);
                // Console.WriteLine((int) b);
                // Console.WriteLine((int)(factN / Modular.Fac(i) / Modular.Fac((int) N - i)));
                // 0と0でない数字の並びを考える
                ans = ans + b * (factN / Modular.Fac(i) / Modular.Fac((int)N - i));

                // Console.WriteLine((int)ans);
            }

            Console.WriteLine((int)ans);
        }
Beispiel #2
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));
            }
        }