有一个 n*n 的表格,每个位置有一些数列,其中 i 行 j 列里面的数列是所有满足长度为 m,值域是 1~n,且所有值的 gcd 与 i,j 的 gcd 相同的数组。
问你表格里总共有多少个数组。
在表格里造序列
题目大意
有一个 n*n 的表格,每个位置有一些数列,其中 i 行 j 列里面的数列是所有满足长度为 m,值域是 1~n,且所有值的 gcd 与 i,j 的 gcd 相同的数组。
问你表格里总共有多少个数组。
思路
害,世界上最好的还得是莫反。
当其它所有的题都在用奇奇怪怪的方式恶心你的时候
只有莫反,纯纯的推式子,纯纯的,多好啊。
(
还有捏嘛csp怎么不考数学(算了考了我也不会,还是别考了吧
考虑枚举 gcd 的值,再分别枚举由多少个数组以及多少个表格上的位置满足条件。
n∑d=1(n∑x=1n∑y=1[gcd(x,y)=d])(n∑a1=1...n∑am=1[gcd(a1,...,am=d)])
n∑d=1(⌊nd⌋∑x=1⌊nd⌋∑y=1[gcd(x,y)=1])(⌊nd⌋∑a1=1...⌊nd⌋∑am=1[gcd(a1,...,am=1)])
n∑d=1(⌊nd⌋∑x=1⌊nd⌋∑y=1∑p|gcd(x,y)μ(p))(⌊nd⌋∑a1=1...⌊nd⌋∑am=1∑p|gcd(a1,...,am)μ(p))
n∑d=1(⌊nd⌋∑p=1μ(p)⌊ndp⌋∑x=1⌊ndp⌋∑y=1)(⌊nd⌋∑p=1μ(p)⌊ndp⌋∑a1=1...⌊ndp⌋∑am=1)
n∑d=1(⌊nd⌋∑p=1μ(p)(⌊ndp⌋)2)(⌊nd⌋∑p=1μ(p)(⌊ndp⌋)m)
n∑d=1⌊nd⌋∑p=1μ(p)(⌊ndp⌋)m=nm
n∑p=1μ(p)(⌊np⌋)m=nm−n∑d=2⌊nd⌋∑p=1μ(p)(⌊ndp⌋)m
设 n∑p=1μ(p)(⌊np⌋)m=fn
fn=nm−n∑d=2f⌊nd⌋
n∑d=1(⌊nd⌋∑p=1μ(p)(⌊ndp⌋)2)(f⌊nd⌋)
其中 f 可以记忆化一下在常规整除分块做到 O(n34),左边的一坨式子,都可以用杜教筛快速 rush μ 前缀和也是 O(n34) 从而通过题目捏。
代码
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-10-31 【luogu P4720】【模板】扩展卢卡斯定理/exLucas(数论)(CRT)
2021-10-31 【LGR-096】洛谷 11 月月赛 I Div.2 题解