logo

yaohaoyou

节
春节

AT_arc221_a Two Arithmetic Progressions 题解

2026-06-02 Views 题解 | 数学368字2 min read繁

题目传送器

更爽的阅读体验

由于辗转相减可得 gcd⁡(Ai+B,Ci+D)=gcd⁡((A−C)i+B−D,Ci+D)\gcd(Ai+B,Ci+D)=\gcd((A-C)i+B-D,Ci+D),不难发现直接这样做一遍类似 exgcd 就能将 A→0A\to 0,接下来令 gcd⁡(Ai+B,Ci+D)=gcd⁡(b,ci+d)\gcd(Ai+B,Ci+D)=\gcd(b,ci+d),现在就变成求 ∑i=1ngcd⁡(b,ci+d)\sum_{i=1}^n \gcd(b,ci+d),其中 b,d∈[−V2,V2],c∈[1,V]b,d\in [-V^2,V^2],c\in [1,V]。

首先将 b←∣b∣b\gets|b|,看到 ∑gcd⁡\sum \gcd 形式套路地转化成 ∑x∣bφ(x)∑i=1n[x∣ci+d]\sum_{x|b}\varphi(x)\sum_{i=1}^n[x|ci+d],对于后半部分的 ∑[x∣ci+d]\sum[x|ci+d] 可以写成二元一次不定方程 ci+xk=−dci+xk=-d,其中 i,ki,k 为未知数,通过 exgcd 解这个方程可以得到 i=px+q,p∈Zi=px+q,p\in \Z(qq 已知)的形式,求一下在 [1,n][1,n] 中有多少个 pp 即可。

总复杂度为 O(TVlog⁡V+V2)\mathcal O(TV\log V+V^2),瓶颈在预处理 [1,V2][1,V^2] 的欧拉函数,感觉还是比较劣,不知道有没有更快的做法。

EOF