题
目
:
题目:
题目:
∑
i
=
1
n
∑
j
=
1
m
[
g
c
d
(
i
,
j
)
=
k
]
\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i, j)=k]
i=1∑nj=1∑m[gcd(i,j)=k]
做 法 : 做法: 做法:
设
f
(
k
)
为
g
c
d
(
i
,
j
)
=
k
的
个
数
设f(k)为gcd(i,j)=k的个数
设f(k)为gcd(i,j)=k的个数,
g
(
k
)
为
满
足
k
∣
g
c
d
(
i
,
j
)
的
对
数
g(k)为满足k|gcd(i,j)的对数
g(k)为满足k∣gcd(i,j)的对数,
那
么
有
下
面
的
关
系
那么有下面的关系
那么有下面的关系
g
(
k
)
=
∑
x
=
1
⌊
n
k
⌋
f
(
k
x
)
g(k)=\sum_{x = 1}^{\lfloor\frac{n}{k}\rfloor}f(kx)
g(k)=x=1∑⌊kn⌋f(kx)
我
们
只
需
要
快
速
求
出
g
(
k
)
,
可
知
如
果
i
,
j
能
被
k
整
数
,
那
么
它
们
可
以
写
成
i
=
k
⋅
x
1
,
j
=
k
⋅
x
2
的
形
式
,
我
们
只
需
求
多
少
对
x
1
,
x
2
即
可
,
可
得
我们只需要快速求出g(k) ,可知如果i,j能被k整数,那么它们可以写成i = k\cdot x_{1}, j = k \cdot x_{2}的形式, 我们只需求多少对x_{1},x_{2}即可,可得
我们只需要快速求出g(k),可知如果i,j能被k整数,那么它们可以写成i=k⋅x1,j=k⋅x2的形式,我们只需求多少对x1,x2即可,可得
g
(
k
)
=
⌊
n
k
⌋
⌊
m
k
⌋
g(k) = \lfloor\frac{n}{k}\rfloor\lfloor\frac{m}{k}\rfloor
g(k)=⌊kn⌋⌊km⌋
根 据 莫 比 乌 斯 反 演 的 变 形 , 可 求 得 f ( k ) 根据莫比乌斯反演的变形,可求得f(k) 根据莫比乌斯反演的变形,可求得f(k)
f ( k ) = ∑ x = 1 ⌊ n k ⌋ μ ( x ) g ( k x ) = ∑ x = 1 ⌊ n k ⌋ μ ( x ) ⌊ n k x ⌋ ⌊ m k x ⌋ f(k) = \sum_{x = 1}^{\lfloor\frac{n}{k}\rfloor}\mu(x)g(kx) =\sum_{x = 1}^{\lfloor\frac{n}{k}\rfloor} \mu(x)\lfloor\frac{n}{kx}\rfloor\lfloor\frac{m}{kx}\rfloor f(k)=x=1∑⌊kn⌋μ(x)g(kx)=x=1∑⌊kn⌋μ(x)⌊kxn⌋⌊kxm⌋
显 然 f ( k ) 就 是 答 案 , 暴 力 求 复 杂 度 是 O ( n ) 的 , 如 何 快 速 求 ? 这 里 可 以 使 用 数 论 分 块 来 做 , ⌊ n d ⌋ 最 多 有 O ( n 个 取 值 ) 显然f(k)就是答案,暴力求复杂度是O(n)的,如何快速求?\\这里可以使用数论分块来做, \lfloor\frac{n}{d}\rfloor最多有O(\sqrt{n}个取值) 显然f(k)就是答案,暴力求复杂度是O(n)的,如何快速求?这里可以使用数论分块来做,⌊dn⌋最多有O(n个取值)
复 杂 度 可 以 做 到 O ( n + m ) 复杂度可以做到O(n+m) 复杂度可以做到O(n+m)