Carousel of Combinations

由圆排列的公式,不难有C(n,k)=(kn)×k!k

于是答案为i=1nj=1i((ji)(j1)!)mod j

显然交换求和次序,有i=1nj=in((ij)(i1)!)mod i

由威尔逊定理可将i限定在质数和4之中,再由卢卡斯定理(这个一定要手写写出来才会发现很容易化简,比赛的时候就觉得可以用程序去算就没有化简,从而导致根本没办法往下面做,所以以后遇到公式了一定要手写写出来)可化简为i=1nj=in(ji(i1))mod i

补题的时候一直想的是每个i对整体的贡献,但是题解告诉我们也可以考虑i对特定局部的贡献,最后将所有局部汇总就好了

具体来说,这里反过去考虑i=1nj=1i((ji)(j1)!)mod j,设dp[i]=j=1i((ji)(j1)!)mod j,再考虑i=1nj=in(ji(i1))mod i,统计每个idp数组的贡献(枚举倍数利用差分),时间复杂度为O(nlnn)

update 2024.8.10

重新做了一遍,做出来了

威尔逊定理:

image

只要对威尔逊定理足够熟悉就好了

然后还要注意最开始不要直接对C(n,k)进行化简,因为我们对化简之后的式子不熟悉,所以不能化简,不化简就可以出现威尔逊定理的形式

然后是统计答案的部分

对于某一特定的n

4对其的贡献:

j=4nj(j1)(j2)(j3)431mod 4

质数p对其的贡献:

j=pn(p1)(jp)modp=j=pn(p(jp)modp)modp

,这个贡献好好算一下,第二行一定要记住有两个modp而不是只有一个

两个部分都可以用差分数组维护(其中质数的贡献的差分数组要求两次前缀和)

posted @   最爱丁珰  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示