【POI08 PER】模意义下的的除法

2019-04-14 14:41发布

取模这种东西到底还是好,将广大OIER从高精度的深渊中解放出来 但是,取模也不总是那么方便的 比方说,我们的操作中不可避免地出现了除法 大部分时候题目会告诉我们取模的数是质数,或者至少除数和取模的数互质,这样我们就能用欧拉定理来解决这个问题了 然而,不幸的事终还是发生了 这道题所要求的取模的数就是任意的~~ 题目本身不难,从后往前按位统计+树状数组即可,但由于可重排列公式中不可避免地出现了除法,怎么办? 盾哥从这个题的标程中抠出了下面这个不太优美的方法 先将要取模的数分解质因数,然后每次要乘或要除一个数的时候,就将那个数的质因子中跟取模的数的相同的提出来,这部分因子“暴力”(就是有除法就直接约分,要用的时候再快速幂算值),另外的部分就和要取模的数互质了,可以直接求其乘法逆元 由于一个数的质因数个数是log级别的,所以通过一大堆预处理可以让取模过程均摊O(logN) 可是,算法常数还是非常大,怎么办呢? 我想了一个比较有效的常数优化,就是算一个数的乘法逆元可以“记忆化”,加入这个优化程序能快上将近一倍 感觉算法不太优美,求更漂亮的实现~~   代码:   速度比盾哥快,哈哈~