gcd(i, j) = k的个数

题 目 : 题目: :
∑ 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=1nj=1m[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)kgcd(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=1knf(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,jki=kx1,j=kx2,x1,x2,
g ( k ) = ⌊ n k ⌋ ⌊ m k ⌋ g(k) = \lfloor\frac{n}{k}\rfloor\lfloor\frac{m}{k}\rfloor g(k)=knkm

根 据 莫 比 乌 斯 反 演 的 变 形 , 可 求 得 f ( k ) 根据莫比乌斯反演的变形,可求得f(k) f(k)

f ( k ) = ∑ x = 1 ⌊ n k ⌋ μ ( x ) g ( k x ) = ∑ x = 1 ⌊ n k ⌋ ⌊ 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} \lfloor\frac{n}{kx}\rfloor\lfloor\frac{m}{kx}\rfloor f(k)=x=1knμ(x)g(kx)=x=1knkxnkxm

显 然 f ( k ) 就 是 答 案 , 暴 力 求 复 杂 度 是 O ( n ) 的 , 如 何 快 速 求 ? 这 里 可 以 使 用 数 论 分 块 来 做 , ⌊ n d ⌋ 最 多 有 O ( n 个 取 值 ) 显然f(k)就是答案,暴力求复杂度是O(n)的,如何快速求?\\这里可以使用数论分块来做, \lfloor\frac{n}{d}\rfloor最多有O(\sqrt{n}个取值) f(k),O(n)使,dnO(n )

复 杂 度 可 以 做 到 O ( n + m ) 复杂度可以做到O(n+m) O(n+m)

你可能感兴趣的:(莫比乌斯反演)