题意

定义一个长度为 \(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);
}

Luogu P6280 [USACO20OPEN]Exercise G的更多相关文章

  1. LG P4161 [SCOI2009]游戏/LG P6280 [USACO20OPEN]Exercise G

    Description(P4161) windy学会了一种游戏. 对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应. 最开始windy把数字按顺序1,2,3,……,N写一排在纸上. 然后再在 ...

  2. 洛谷 P6276 - [USACO20OPEN]Exercise P(组合数学+DP)

    洛谷题面传送门 废了,又不会做/ll orz czx 写的什么神仙题解,根本看不懂(%%%%%%%%% 首先显然一个排列的贡献为其所有置换环的乘积.考虑如何算之. 碰到很多数的 LCM 之积只有两种可 ...

  3. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  4. POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)

    手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn.net/suncongbo/article/details/79382991 题目链接: (p ...

  5. luogu P5366 [SNOI2017]遗失的答案

    luogu 首先gcd为\(G\),lcm为\(L\),有可能出现的数(指同时是\(G\)的因数以及是\(L\)的倍数)可以发现只有几百个.如果选出的数要能取到gcd,那么对于每种质因子,都要有一个数 ...

  6. 『题解』洛谷P4016 负载平衡问题

    title: categories: tags: - mathjax: true --- Problem Portal Portal1:Luogu Portal2: LibreOJ Descripti ...

  7. Storyboards Tutorial 03

    这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...

  8. 文件图标SVG

    ​<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink ...

  9. 线段树||BZOJ5194: [Usaco2018 Feb]Snow Boots||Luogu P4269 [USACO18FEB]Snow Boots G

    题面:P4269 [USACO18FEB]Snow Boots G 题解: 把所有砖和靴子排序,然后依次处理每一双靴子,把深度小于等于它的砖块都扔线段树里,问题就转化成了求线段树已有的砖块中最大的砖块 ...

随机推荐

  1. nginx安装步骤

    1.下载地址:下载nginx压缩包wget -c https://nginx.org/download/nginx-1.10.1.tar.gz2.配置nginx安装所需的环境yum install g ...

  2. 微服务实战系列(八)-网关springcloud gateway自定义规则

    1. 场景描述 先说明下项目中使用的网关是:springcloud gateway, 因需要给各个网关服务系统提供自定义配置路由规则,实时生效,不用重启网关(重启风险大),目前已实现:动态加载自定义路 ...

  3. Spring一些笔记

    @ControllerAdvice ,被注解的class表示这是一个增强的 Controller. 使用这个 Controller ,可以实现三个方面的功能: 全局异常处理 全局数据绑定 全局数据预处 ...

  4. Neo4j---性能优化

    不会项目管理的研发不是好loder(^_^ ^_^),开个玩笑,目的是想说项目管理很重要,研发同胞们需要重视.重视.重视(重要的事情说三遍).随着项目业务扩展,不再是停留在基本某一业务范围,海量数据接 ...

  5. Oracle12c 使用总结

    /*创建临时表空间 */create temporary tablespace BBB tempfile 'D:\APP\oracle\oradata\orcl\BBB.dbf' size 500m ...

  6. Go-变量-var

    什么是变量? 一种抽象,计算机用来保存现实数据的容器,通过这个变量抽象可以写入现实数据到计算机中,并且可以读取变量取到保存到计算机中的现实数字化数据 Go-变量定义 关键字 var 关键符号 := i ...

  7. PHP 7:真实世界的应用开发(中文翻译)

    前言 PHP 7:真实世界的应用开发(中文翻译) 作者:Doug Bierer, Altaf Hussain, Branko Ajzele 原书名称:<PHP 7: Real World App ...

  8. C面向对象: 升级版本实现:同步逻辑、少量连续失败则增补、多次连续失败则拉长同步周期

    // C语言之 面向对象+虚事务的抽象 /*********** 进阶练习: (对虚的事物的抽象) 完善部门职责 ***********************/ #include <stdio ...

  9. visual studio 2015 安装MSDN全称Microsoft Developer Network 安装离线的MSDN

    MSDN: 微软向开发人员提供的一套帮助系统,其中包含大量的开发文档,技术文章和示例代码. 这里介绍了vs2015 装离线的MSDN(说明一点是,如果不行,说明你的文件有缺陷,没安装好,之前我用vs2 ...

  10. ubuntu1804 snort base

    1.环境准备 apt安装 sudo apt-get update -y sudo apt-get dist-upgrade -y sudo apt-get install -y zlib1g-dev ...