题意

定义一个长度为 \(n\) 的置换的步数为将 \(P=(1,2,\cdots,n)\) 在该置换操作下变回原样的最小次数。

求所有 \(K\) 的和,使得存在一个长度为 \(n\) 的置换使得其步数为 \(K\),对 \(m\) 取模。

\(\texttt{Data Range:}1\leq n\leq 10^4,10^8\leq m\leq 10^9+7\)

题解

DP 练习题。

注意到一个置换的步数就是它的循环表示中所有循环长度的 \(\operatorname{lcm}\)。于是可以考虑对最大的质数因子来 DP。

设 \(f_{i,j}\) 表示当前所有循环中长度不为 \(1\) 的总长度之和为 \(i\),每个循环长度中最大的质因子不超过 \(p_j\) 的答案。

考虑枚举一下 \(p_j\) 的次幂作为新的循环的长度(加到原来的循环由于之后算答案会去重所以是一样的),于是得到一个转移方程:

\[f_{i,j}=f_{i,j-1}+\sum\limits_{p_j^k\leq i}p_j^kf_{i-p_j^k,j-1}
\]

然后可以 \(O(n^2)\) 转移。

注意到这个 \(j\) 只由 \(j-1\) 转移而来,所以可以滚动掉 \(j\) 的一维,同时 \(i\) 要倒序枚举。

代码

#include<bits/stdc++.h>
using namespace std;
typedef int ll;
typedef long long int li;
const ll MAXN=1e4+51;
ll n,ptot,MOD,res=1;
ll f[MAXN],prime[MAXN],np[MAXN];
inline ll read()
{
register ll num=0,neg=1;
register char ch=getchar();
while(!isdigit(ch)&&ch!='-')
{
ch=getchar();
}
if(ch=='-')
{
neg=-1;
ch=getchar();
}
while(isdigit(ch))
{
num=(num<<3)+(num<<1)+(ch-'0');
ch=getchar();
}
return num*neg;
}
int main()
{
n=read(),MOD=read(),f[0]=1;
for(register int i=2;i<=n;i++)
{
if(!np[i])
{
prime[++ptot]=i;
}
for(register int j=1;i*prime[j]<=n;j++)
{
np[i*prime[j]]=1;
if(!(i%prime[j]))
{
break;
}
}
}
for(register int i=1;i<=ptot;i++)
{
for(register int j=n;j>=1;j--)
{
for(register int k=prime[i];k<=j;k*=prime[i])
{
f[j]=(f[j]+(li)k*f[j-k]%MOD)%MOD;
}
}
}
for(register int i=1;i<=n;i++)
{
res=(res+f[i])%MOD;
}
printf("%d\n",res);
}

最新文章

  1. c++调用lua
  2. 使用maven命令将jar包导入本地仓库
  3. Asp.Net Core--简单的授权
  4. POJ 2559 Largest Rectangle in a Histogram
  5. 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果
  6. POJ 2828Buy Tickets
  7. Android ADB server didn&#39;t ACK * failed to start daemon * 简单有效的解决方案
  8. 开发工具IDEA的使用
  9. angularJs ionic phoneGap 分享
  10. L3-002. 堆栈
  11. PHP SPL迭代模式
  12. MySQL数据库性能优化(享学课堂听课笔记)
  13. [转]一个普通IT人的十年回顾---金旭亮
  14. 10个财务工作中常用的 Excel 万能公式
  15. python 将函数参数一键转化成字典的技巧,非**kwargs,公有方法和函数抵制kwargs。
  16. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:建立一个EF数据模型
  17. opencv中的bitwise_not,bitwise_xor,bitwise_or,bitwise_and的使用方法与效果。
  18. Linux下 jenkins的安装
  19. python一条语句分析几个常用函数和概念
  20. linux shell学习-1

热门文章

  1. SSRF漏洞(原理、漏洞利用、修复建议)
  2. burp suite 之 Decoder(解码) Comparer(比较器) Extender(扩展)
  3. 使用Maven那么久了,你对企业级Maven的核心配置了解多少?
  4. 【题解】「MCOI-02」Convex Hull 凸包
  5. Jmeter之连接数据库
  6. 腾讯云服务器,使用xshell ssh秘钥登录的时候报错:所选的用户密钥未在远程主机上注册
  7. JVM系列【5】JVM常用指令
  8. Elasticsearch(4):映射
  9. leaflet如何加载10万数据
  10. GIS和视频监控的集成