P2522 [HAOI2011]Problem b
题意
给出 N 组数据,每组数据有 a,b,c,d,k,求解:
x=a∑by=c∑d[gcd(x,y)=k]
1⩽N,k⩽5×104
1⩽a⩽b⩽5×104
1⩽c⩽d⩽5×104
思路
对原式进行变换,变换技巧见Mobius反演:
x=a∑by=c∑d[gcd(x,y)=k]=x=⌈ka⌉∑⌊kb⌋y=⌈kc⌉∑⌊kd⌋[gcd(x,y)=1]a=⌈ka⌉,b=⌊kb⌋,c=⌈kc⌉,d=⌊kd⌋x=a∑by=c∑d[gcd(x,y)=1]=x=a∑by=c∑dε(gcd(x,y)=1)=x=a∑by=c∑d(μ∗1)(gcd(x,y)=1)=x=a∑by=c∑dz∣gcd(x,y)∑μ(z)=z=1∑min(b,d)x=⌈za⌉∑⌊zb⌋y=⌈zc⌉∑⌊zd⌋μ(z)=z=1∑min(b,d)(⌊zb⌋−⌈za⌉+1)(⌊zd⌋−⌈zc⌉+1)μ(z)⌈za⌉=⌊za+z−1⌋=⌊za−1⌋+1⌈zc⌉=⌊zc+z−1⌋=⌊zc−1⌋+1z=1∑min(b,d)(⌊zb⌋−⌊za−1⌋)(⌊zd⌋−⌊zc−1⌋)μ(z)
其中使用的数论函数 ε,μ,1 见 积性函数-例子。
于是只需要用欧拉筛,线性预处理出 μ 函数的前缀和,然后用数论分块就能解决了
注: 数论分块这里是取四个的最小值。
总复杂度 O(N⋅min(b,d))
点击显/隐代码