Carousel of Combinations

由圆排列的公式,不难有 C ( n , k ) = ( k n ) × k ! k C(n,k)=(_k^n)\times \frac{k!}{k} C(n,k)=(kn)×kk!

于是答案为 ∑ i = 1 n ∑ j = 1 i ( ( j i ) ⋅ ( j − 1 ) ! ) m o d j \sum_{i=1}^{n}\sum_{j=1}^{i}((_j^i)\cdot (j-1)!)mod\space j ∑i=1n∑j=1i((ji)⋅(j−1)!)mod j

显然交换求和次序,有 ∑ i = 1 n ∑ j = i n ( ( i j ) ⋅ ( i − 1 ) ! ) m o d i \sum_{i=1}^{n}\sum_{j=i}^{n}((_i^j)\cdot (i-1)!)mod\space i ∑i=1n∑j=in((ij)⋅(i−1)!)mod i

由威尔逊定理可将 i i i限定在质数和 4 4 4之中,再由卢卡斯定理(这个一定要手写写出来才会发现很容易化简,比赛的时候就觉得可以用程序去算就没有化简,从而导致根本没办法往下面做,所以以后遇到公式了一定要手写写出来)可化简为 ∑ i = 1 n ∑ j = i n ( ⌊ j i ⌋ ⋅ ( i − 1 ) ) m o d i \sum_{i=1}^{n}\sum_{j=i}^{n}(\lfloor\frac{j}{i}\rfloor\cdot (i-1))mod\space i ∑i=1n∑j=in(⌊ij⌋⋅(i−1))mod i

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

具体来说,这里反过去考虑 ∑ i = 1 n ∑ j = 1 i ( ( j i ) ⋅ ( j − 1 ) ! ) m o d j \sum_{i=1}^{n}\sum_{j=1}^{i}((j^i)\cdot (j-1)!)mod\space j ∑i=1n∑j=1i((ji)⋅(j−1)!)mod j,设 d p i = ∑ j = 1 i ( ( j i ) ⋅ ( j − 1 ) ! ) m o d j dpi=\sum{j=1}^{i}((j^i)\cdot (j-1)!)mod\space j dpi=∑j=1i((ji)⋅(j−1)!)mod j,再考虑 ∑ i = 1 n ∑ j = i n ( ⌊ j i ⌋ ⋅ ( i − 1 ) ) m o d i \sum{i=1}^{n}\sum_{j=i}^{n}(\lfloor\frac{j}{i}\rfloor\cdot (i-1))mod\space i ∑i=1n∑j=in(⌊ij⌋⋅(i−1))mod i,统计每个 i i i对 d p dp dp数组的贡献(枚举倍数利用差分),时间复杂度为 O ( n O(n O(n ln n ) n) n)

相关推荐
ekkoalex1 小时前
训练框架以及算法实现的框架
算法
DFT计算杂谈1 小时前
交错磁研究进展材料物性与交叉应用
数据库·人工智能·python·opencv·算法
玖玥拾1 小时前
LeetCode 26 删除有序数组中的重复项
算法·leetcode
Kina_C2 小时前
LVS负载均衡的十二种核心调度算法
linux·运维·算法·负载均衡·lvs
hansang_IR3 小时前
【题解】[AGC020E] Encoding Subsets
c++·算法·dp
核数聚3 小时前
【赛迪专访核数聚】深耕数据治理,打通数据孤岛夯实 AI 发展根基
大数据·人工智能·算法
小许同学记录成长3 小时前
相对辐射定标技术文档
图像处理·算法
白白白小纯4 小时前
算法篇—返回倒数第k个节点
c语言·数据结构·算法·leetcode
小羊先生car4 小时前
RTOS-F429-HAL-(动/静态)任务的创建(2026/7/27)
开发语言·算法·c#
无忧.芙桃4 小时前
数据结构之堆
c语言·数据结构·c++·算法·