好好好好好题
组数据,给定 ,求所有 个大小为 的由 组成的有标号环 中,有多少个满足 。对 取模。
显然的这就是对 中 的个数进行了限制,以下重新令 表示这个个数。于是我们关心对于一个特定的 序列,如何判断是否存在 序列与其对应,以及对应的 序列有多少个。
对于任何一个 ,考虑它对应的 ,显然地,下标划分成了 个不同的小环。这些小环上, 的数值乘积为 ,也就是说相邻两个 小环的乘积相等,也就是所有 小环的乘积都相等,这也就是说,所有小环上要么都有奇数个 ,要么都有偶数个。所有合法的 数组必须满足这条性质。
当确定了一个满足上述条件的 数组后,通过它对应的 数组,我们确定了每个环上的 的相互关系,也就是说,只要确定其中的任何一个元素,就能确定整个环。此时对应的 数组恰好有 个(它们并不都合法)。 可以由 和 唯一确定,也就是说,当前找到的满足 限制的 数组,如果同时满足 的限制,就能唯一对应上我们正在考虑的 数组。
对于每个环,只有将其整体反转的操作可以进行。当 为偶数时,对任何一个环做反转都是没有用的。只有一部分( 个满足某种性质的) 是合法的,并且这些 恰好对应了 个合法的 (每个环上 都可以任意反转)。而当 为奇数时,每个满足先前限制的 ( 个)都恰好对应了 个合法的 。分别考虑两种情况的答案。
首先考虑 为奇数。令 ,则答案为:
接下来考虑 为偶数的情况。注意到每个环上 中所有元素会被算恰好 次,所以我们相当于额外限制所有小环上有偶数个 。所以答案即为:
怎么求这个东西呢?注意到设 。所以
显然求这两个多项式的点值需要用到长度为 级别的 NTT,这个显然不可能过。但是由后面的封闭形式,很容易用快速幂求出单位根处的点值,大大加速求解过程。时间复杂度为 ,常数很小。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现