Carousel of Combinations
由圆排列的公式,不难有\(C(n,k)=(_k^n)\times \frac{k!}{k}\)
于是答案为\(\sum_{i=1}^{n}\sum_{j=1}^{i}((_j^i)\cdot (j-1)!)mod\space j\)
显然交换求和次序,有\(\sum_{i=1}^{n}\sum_{j=i}^{n}((_i^j)\cdot (i-1)!)mod\space i\)
由威尔逊定理可将\(i\)限定在质数和\(4\)之中,再由卢卡斯定理(这个一定要手写写出来才会发现很容易化简,比赛的时候就觉得可以用程序去算就没有化简,从而导致根本没办法往下面做,所以以后遇到公式了一定要手写写出来)可化简为\(\sum_{i=1}^{n}\sum_{j=i}^{n}(\lfloor\frac{j}{i}\rfloor\cdot (i-1))mod\space i\)
补题的时候一直想的是每个\(i\)对整体的贡献,但是题解告诉我们也可以考虑\(i\)对特定局部的贡献,最后将所有局部汇总就好了
具体来说,这里反过去考虑\(\sum_{i=1}^{n}\sum_{j=1}^{i}((_j^i)\cdot (j-1)!)mod\space j\),设\(dp[i]=\sum_{j=1}^{i}((_j^i)\cdot (j-1)!)mod\space j\),再考虑\(\sum_{i=1}^{n}\sum_{j=i}^{n}(\lfloor\frac{j}{i}\rfloor\cdot (i-1))mod\space i\),统计每个\(i\)对\(dp\)数组的贡献(枚举倍数利用差分),时间复杂度为\(O(n \ln n)\)
update 2024.8.10
重新做了一遍,做出来了
威尔逊定理:
只要对威尔逊定理足够熟悉就好了
然后还要注意最开始不要直接对\(C(n,k)\)进行化简,因为我们对化简之后的式子不熟悉,所以不能化简,不化简就可以出现威尔逊定理的形式
然后是统计答案的部分
对于某一特定的\(n\):
\(4\)对其的贡献:
质数\(p\)对其的贡献:
,这个贡献好好算一下,第二行一定要记住有两个\(\mod p\)而不是只有一个
两个部分都可以用差分数组维护(其中质数的贡献的差分数组要求两次前缀和)