51nod 1675 (莫比乌斯反演)

我们先不考虑 a b i = b a j a_{b_i} = b_{a_j} abi=baj 这种情况,那么就很裸的莫比乌斯反演了。
f ( x ) = ∑ i = 1 n ∑ j = 1 n [ gcd ⁡ ( i , j ) = = x ] f(x) = \sum_{i=1}^{n}\sum_{j=1}^{n}[\gcd(i,j)==x] f(x)=i=1nj=1n[gcd(i,j)==x]
在设 g ( x ) = ∑ x ∣ d f ( d ) g(x) = \sum_{x|d}f(d) g(x)=xdf(d)
= ∑ x ∣ d ∑ i = 1 n ∑ j = 1 n [ gcd ⁡ ( i , j ) = = d ] =\sum_{x|d}\sum_{i=1}^{n}\sum_{j=1}^{n}[\gcd(i,j)==d] =xdi=1nj=1n[gcd(i,j)==d]
= ∑ i = 1 n ∑ j = 1 n [ x ∣ gcd ⁡ ( i , j ) ] =\sum_{i=1}^{n}\sum_{j=1}^{n}[x|\gcd(i,j)] =i=1nj=1n[xgcd(i,j)]
= ∑ x ∣ i n ∑ x ∣ j n 1 =\sum_{x|i}^{n}\sum_{x|j}^{n}1 =xinxjn1
就得到如上式子,
那如果在考虑 a b i = b a j a_{b_i} = b_{a_j} abi=baj这个因素,只需加一个限制条件
f ( x ) = ∑ i = 1 n ∑ j = 1 n [ gcd ⁡ ( i , j ) = = x ] [ a b i = b a j ] f(x) = \sum_{i=1}^{n}\sum_{j=1}^{n}[\gcd(i,j)==x][a_{b_i} = b_{a_j}] f(x)=i=1nj=1n[gcd(i,j)==x][abi=baj]
套用上面的方式,得到: g ( x ) = ∑ x ∣ i n ∑ x ∣ j n [ a b i = b a j ] g(x) = \sum_{x|i}^{n}\sum_{x|j}^{n}[a_{b_i} = b_{a_j}] g(x)=xinxjn[abi=baj]
对于这个式子,可以 l o g log log得到

然后反演回去: f ( x ) = ∑ x ∣ d u ( d x ) ∗ g ( d ) f(x)=\sum_{x|d}u(\frac{d}{x})*g(d) f(x)=xdu(xd)g(d)
这里x 等于1,所以最终答案为:
f ( 1 ) = ∑ d = 1 n u ( d ) ∗ g ( d ) f(1)=\sum_{d=1}^{n}u(d)*g(d) f(1)=d=1nu(d)g(d)
= ∑ d = 1 n u ( d ) ∗ ∑ d ∣ i n ∑ d ∣ j n [ a b i = b a j ] =\sum_{d=1}^{n}u(d)* \sum_{d|i}^{n}\sum_{d|j}^{n}[a_{b_i} = b_{a_j}] =d=1nu(d)dindjn[abi=baj]

最终复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值