[NOI2016] 循环之美

NOI2016 循环之美

首先要求数值互不相同,就相当于要求分子分母互质(不互质就会重复)

考虑怎么转化纯循环小数这个条件:

xy 循环节为 l 位,这意味着 xy 向左平移 l 位后,小数点后的部分不变,即:

xklxmody

x,y 互质,因此只要 k,y 互质即可。

于是只需要求

i=1nj=1m[gcd(i,j)=1][gcd(j,k)=1]

=i=1nj=1m[gcd(i,j)=1][gcd(j,k)=1]=j=1m[gcd(j,k)=1]i=1nd|gcd(i,j)μ(d)=d=1n[gcd(d,k)=1]μ(d)j=1m/di=1n/d[gcd(j,k)=1]=d=1n[gcd(d,k)=1]μ(d)ndj=1m/d[gcd(j,k)=1]

这里可以整除分块了,考虑分别计算:

f(x)=i=1x[gcd(i,k)=1]g(x,k)=i=1x[gcd(i,k)=1]μ(i)

注意到 k 非常小,因此 gcd(i,k)=gcd(imodk,k),我们只需要对 1k 中每个数 x 维护 g(x) 表示 该数的数中与 k 互质的数的个数。再维护一个 g(x) 的前缀和即可 O(1) 求解单个 f

但是 g 不行,因为 μ(i)μ(i+k),两者的关系很复杂。

g(x,k)=i=1x[gcd(i,k)=1]μ(i)=i=1xμ(i)d|gcd(i,k)μ(d)=d|kxμ(d)i=1x/dμ(id)

gcd(i,d)1μ(id)=0,对答案没有贡献,因此当 gcd(i,d)=1,可以积性函数展开后面的 μ

g(x,k)=d|kxμ2(d)i=1x/dμ(i)[gcd(i,d)=1]=d|kxμ2(d)g(xd,d)

于是可以递归求解所有的 g,初始值 g(x,1)=i=1xμ(i) 杜教筛即可。

复杂度 O(nσ0(k)+n23)

posted @   cjTQX  阅读(112)  评论(0编辑  收藏  举报
历史上的今天:
2022-06-06 2022.6.2 联训
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开