Solution Set - 数论相关
绝了,六道题都差一步想出来或者差一个细节就开始看题解。
CF906D
要求 ,那就要求 。从这个思路开始往后迭代即可。 迭代到 的次数大概是 级别的,所以时间复杂度正确。注意扩展欧拉定理的正确运用。具体实现直接往后枚举即可,写成递归可能更简单。
CF1562F
发现询问次数和 很接近,那应该考虑找到一个比较特殊的数,对它和序列中所有数进行询问。这个数当然是大质数最好。
如果序列中没有大质数,则长度不会太长,最长大概在 左右。而 的时候都可以对所有数对做询问,询问之后每次找到还没确定的数中产生的最大 ,它一定是最大的两个数产生的。
如果序列中有大质数,需要找到它。不好准确定位,那就考虑随机化。计算会发现找到的概率还是很大的。先进行 次随机询问,然后找到回答的最大质因子最大的一次,就可以假设它的最大质因子是我们想要的大质数。再取一个数和这次询问的两个数询问一下,确定哪个是大质数。再做 次询问确定所有数即可。
CF1698G
会发现问题可以转化成模 意义下的多项式乘法。给定的 序列丢掉低位 就是一个多项式 ,在无穷序列上异或的位置构成另一个多项式 。最后要求 , 最小。那也可以写成 ,这里等号都在模 意义下。对后面这个式子BSGS即可。
CF516E
显然只用考虑 互质的情况。不互质时除掉最大公约数,注意会有一些 corner case。下面来考虑互质的情形。
假设有一个编号为 的男生开始就快乐,那第 天他让 号女生变快乐,第 天他让 号女生变快乐。那么我们可以认为是第 号女生用了 天使得 号女生变快乐。更简单一点,如果 号女生某一天变快乐了, 天后她会让 号女生变快乐。
这时可以类似同余最短路的模型建图,从 向 连边权为 的边。这些边构成一个大环,剩下还有一些边:如果 号男生初始快乐,则第 天开始 号女生快乐,所以从源点向 号女生连边权为 的边;如果 号女生初始快乐,从源点向 连边权为 的边。然后要求源点到所有点的最短路中最长的一条的长度。注意到有一个大环,环上边权相同,剩下的边数目不多,所以按照环上顺序排序求解即可。
CF1225G
考虑每个数被除的次数,也就是对最终的 的贡献系数。假设 被除了 次,则 。要求 。
然后会发现如果这样一组 存在,就一定可以构造出合法的方式。具体方法是按照 从大到小排序,则最大的两个 值一定一样。取出最大的两个合并,除几次 就把 减掉几,然后插回堆中。重复即可。因为保证了 ,所以一定是可以的。
问题转化为判定。这时可以状压DP,定义 表示存在一组 使得 。转移方程有两种: 和 。第一种可以用 bitset 优化,这样总时间复杂度是 。最后输出方案只要倒着 DFS 就行。
CF765G
会发现幂次是没用的,只用考虑 ,然后把答案乘上 。
由中国剩余定理, 到 中的数 可以与 一一对应。这时 。也就是说,确定 之后,我们可能可以确定一些 一定满足 。
那么就有一个暴力:枚举 的值,维护一个“能否确定不互质”的序列,要求最后这个序列等于 的方案数。这个复杂度显然是逆天的,但是会发现每个大于等于 的质数都至多让字符串的一位确定为 ,所以只用枚举 的质数对应的余数。
但是还是很大,不超过 的质数也不少。好消息是,如果有 ,那么确定模 的余数的时候就可以确定一半,有效状态数不超过 ,这启发我们做一个记忆化搜索;坏消息是,如果没有 ,状态数还是很逆天。
既然已经这么逆天了,那我们不妨再逆天一点,看看不超过 的质数能不能分开处理。枚举会发现从 搜到 的状态数都不会太大。而当考虑到 的时候,就有一些状态可以合并了——中间 位只用考虑 的个数,它们不会再影响了(以 为例)。同样的,考虑到 就可以只考虑中间 位的 的个数。做了这个优化之后状态数显著降低,可以通过。
具体而言,维护一个状态:开头 位的具体值,结尾 位的具体值,以及中间 的个数。转移是不难的。在考虑 之前,把 分别设为 ,其它类似。需要一个哈希表来记录状态。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具