标签:source class 一个 play rod set 次数 质数 形式
定义一个排列\(A\)的权值\(f(A)=\min(i),A^i=I,i\in N^+\),其中\(A^i\)表示转置快速幂,I表示单位排列。例如,\(f({1,2,3,4,5})=1,f({2,3,1,5,4})=6\).
给定\(n\),对于所有长度为\(n\)的排列\(A\),求\(\prod f(A)\operatorname{mod}P\).
\(N\le 7500\),\(P\in[10^8,10^9+7]\)且是质数
source :[USACO20OPEN]Exercise P
一个排列的权值,相当于这个排列所成的环大小的LCM
最后要输出\(\prod\),所以我们考虑统计答案中每个质数的指数。由于欧拉定理,我们只需要对指数模\(P-1\)就可以。
有一个常见套路,考虑枚举\(p^i\),如果我们发现某个排列的权值是\(p^i\)的倍数,则给\(p\)的指数增添一点贡献。
现在有2种DP的做法
枚举\(p^i\),令\(f_{i,1/0}\)表示长度为\(i\)的排列,权值是/否\(p^i\)倍数的方案数,我们枚举1号点所在的排列长度,有
转移系数我们认为是钦定1号点包含于一个排列(第二维略,请自行补充)
\(O(n^3)\),过不了。
对于每一个质数,我们求的是
\(fac\)表示其中包含\(p\)质因子的个数,\(len_i\)表示循环圈的长度。
套一层min-max
容斥
枚举\(i\)和\(p\)。我们需要求出,有多少个子集,他们的每一个\(p^i|len_i\),最后乘一个容斥系数,再乘这个子集出现的次数。
令\(t=p^i\)。我们考虑\(dp_n\)表示长度为\(nt\)的权值,我们有
转移系数带个负号是因为容斥系数导致的。注意为了凑形式\(dp_0=-1\).
最终答案下,\(p\)的指数的贡献是
\(\sum dp_iC_{n}^{it}(n-it)!\)
考虑一个子集出现了多少次。
每次DP的复杂度是\(O(\frac{n^2}{i^2})\).由于\(\sum_{i=1}^\infin \frac{1}{i^2}\)收敛,所以总复杂度\(O(n^2)\)。
标签:source class 一个 play rod set 次数 质数 形式
原文地址:https://www.cnblogs.com/icantfindaname/p/12852618.html