Description
求
∑
i
=
1
n
∑
j
=
1
n
[
g
c
d
(
i
,
j
)
=
i
⊕
j
]
\sum_{i=1}^n \sum_{j=1}^n [gcd(i,j)=i \oplus j]
i=1∑nj=1∑n[gcd(i,j)=i⊕j]
其中那个符号是按位异或
n<=1e6
Solution
我们钦定
a
>
b
a>b
a>b
首先证明
g
c
d
(
a
,
b
)
≤
a
−
b
gcd(a,b)\leq a-b
gcd(a,b)≤a−b
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
−
b
)
≤
a
−
b
gcd(a,b)=gcd(b,a-b)\leq a-b
gcd(a,b)=gcd(b,a−b)≤a−b,由辗转相减可知等式成立,且a和b的约数不大于min(a,b)
然后有
a
⊕
b
≥
a
−
b
a\oplus b\geq a-b
a⊕b≥a−b
我们把
a
a
a中是0且
b
b
b中是1的位置交换,记为
a
′
a'
a′和
b
′
b'
b′
有
a
′
⊕
b
′
=
a
′
−
b
′
=
a
⊕
b
a'\oplus b'=a'-b'=a\oplus b
a′⊕b′=a′−b′=a⊕b
然后就可以发现
a
⊕
b
=
a
′
−
b
′
≥
a
−
b
a\oplus b=a'-b'\geq a-b
a⊕b=a′−b′≥a−b是成立的
综合一下看可以发现
g
c
d
(
a
,
b
)
=
a
⊕
b
=
a
−
b
gcd(a,b)=a\oplus b=a-b
gcd(a,b)=a⊕b=a−b
令
c
=
a
−
b
c=a-b
c=a−b,有
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
−
b
)
=
a
⊕
b
gcd(a,b)=gcd(b,a-b)=a\oplus b
gcd(a,b)=gcd(b,a−b)=a⊕b
然后套c进去有
g
c
d
(
b
,
c
)
=
c
gcd(b,c)=c
gcd(b,c)=c,于是我们枚举c,枚举c的倍数就可以nlogn做了
Code
口胡题解不写代码