Биномиальный коэффициент - это один факториал, деленный на два других, хотя термин k!
внизу очевидным образом отменяет.
Обратите внимание, что если 1009 (включая его кратные), появляется больше раз вв числителе, чем в знаменателе, то ответный мод 1009 равен 0. Он не может появляться в знаменателе больше раз, чем в числителе (поскольку биномиальные коэффициенты являются целыми числами), поэтому единственные случаи, когда вы должны что-либо делать, это когдаодинаковое количество раз в обоих.Не забудьте посчитать кратные (1009) ^ 2 как два, и т. Д.
После этого, я думаю, вы просто зачищаете небольшие дела (имеется в виду небольшое количество значений для умножения / деления)Хотя я не уверен без нескольких тестов.На плюсовой стороне 1009 простое число, поэтому в поле происходит арифметическое по модулю 1009, что означает, что после раздачи кратных 1009 сверху и снизу вы можете выполнить остальную часть модуля умножения и деления 1009 в любом порядке.
Там, где остаются немалые дела, они все равно будут включать умножение длинных серий последовательных чисел.Это можно упростить, зная 1008! (mod 1009)
.Это -1 (1008, если хотите), поскольку 1 ... 1008 - это p-1
ненулевые элементы простого поля над p
.Поэтому они состоят из 1, -1, а затем (p-3)/2
пар мультипликативных инверсий.
Так, например, рассмотрим случай C ((1009 ^ 3), 200).
Представьте себечто число 1009 равно (не знаю, если они, потому что я не закодировал формулу, чтобы выяснить), так что это случай, требующий работы.
На вершине у нас есть 201... 1008, который мы должны рассчитать или найти в предварительно вычисленной таблице, затем 1009, затем 1010 ... 2017, 2018, 2019 ... 3026, 3027 и т. Д. Все диапазоны ...1, поэтому нам просто нужно знать, сколько таких диапазонов.
Это оставляет 1009, 2018, 3027, которые, как только мы отменили их со 1009 снизу, будут просто 1, 2, 3, ... 1008, 1010, ..., плюс несколько кратных1009 ^ 2, который мы снова отменим и оставим себя с последовательными целыми числами для умножения.
Мы можем сделать что-то очень похожее с нижней частью, чтобы вычислить мод продукта 1009 из "1 ... 1009 ^ 3 -200 со всеми полномочиями 1009 разделены ".Это оставляет нас с разделением в основной области.IIRC в принципе сложно, но 1009 - это достаточно малое число, чтобы мы могли управлять 1000 из них (верхний предел количества тестовых случаев).
Конечно, при k = 200, существует огромное перекрытие, котороеможет быть отменено более напрямую.Это то, что я имел в виду под маленькими и немалыми случаями: я рассматривал это как немалый случай, когда на самом деле мы могли бы просто уйти от этого "грубым" путем вычисления ((1009^3-199) * ... * 1009^3) / 200!