题目
求 g c d ( a , b ) = a x o r b gcd(a,b)=a\ xor\ b gcd(a,b)=a xor b, a , b ∈ [ 1.. n ] a,b\in[1..n] a,b∈[1..n]的方案数
思路1
设
c
=
g
c
d
(
a
,
b
)
=
a
x
o
r
b
c=gcd(a,b)=a\ xor\ b
c=gcd(a,b)=a xor b
到这30分,具体做法:暴力O(n^2logn)
∵
a
x
o
r
b
=
c
\because a\ xor\ b=c
∵a xor b=c
∴
a
x
o
r
c
=
b
\therefore a\ xor\ c=b
∴a xor c=b
∴
g
c
d
(
a
,
a
x
o
r
c
)
=
a
x
o
r
b
\therefore gcd(a,a\ xor\ c)=a\ xor\ b
∴gcd(a,a xor c)=a xor b
∴
g
c
d
(
a
,
a
x
o
r
c
)
=
c
\therefore gcd(a,a\ xor\ c)=c
∴gcd(a,a xor c)=c
到这60分,具体做法:此时已经知道a是c的倍数,枚举c和c的倍数即可,加上gcd的复杂度O(nlog2n)
∵
g
c
d
(
a
,
b
)
≤
a
−
b
,
a
x
o
r
b
≥
a
−
b
\because gcd(a,b)\leq a-b,a\ xor\ b\geq a-b
∵gcd(a,b)≤a−b,a xor b≥a−b
∴
c
=
a
−
b
\therefore c=a-b
∴c=a−b
∴
b
=
a
−
c
\therefore b=a-c
∴b=a−c
∴
g
c
d
(
a
,
b
)
=
g
c
d
(
a
,
a
−
c
)
=
c
\therefore gcd(a,b)=gcd(a,a-c)=c
∴gcd(a,b)=gcd(a,a−c)=c
∵
g
c
d
(
a
,
a
x
o
r
c
)
=
c
\because gcd(a,a\ xor\ c)=c
∵gcd(a,a xor c)=c
所以当且仅当
a
−
c
=
a
x
o
r
c
a-c=a\ xor\ c
a−c=a xor c时
g
c
d
(
a
,
a
−
c
)
=
c
gcd(a,a-c)=c
gcd(a,a−c)=c
到这100分,具体做法:同样知道a是c的倍数,但此时不需要计算gcd,复杂度O(nlogn)
思路2(非正确,仅供参考)
首先
a
≥
b
a\geq b
a≥b,所以有
1
<
=
a
x
o
r
b
<
2
(
[
l
o
g
2
a
]
+
1
)
1<=a\ xor\ b<2^{([log_2a]+1)}
1<=a xor b<2([log2a]+1)
1
<
=
g
c
d
(
a
,
b
)
<
=
b
1<=gcd(a,b)<=b
1<=gcd(a,b)<=b
枚举a,b的最大公约数,同时这也是 a x o r b a\ xor\ b a xor b的值,计算解数
g
c
d
(
x
,
y
)
=
i
gcd(x,y)=i
gcd(x,y)=i
x
x
o
r
y
=
i
x\ xor\ y=i
x xor y=i
下面是作者闲的无聊推的一些乱七八糟的东西
若 i = 1 i=1 i=1,则 g c d ( x , y ) = 1 gcd(x,y)=1 gcd(x,y)=1,即 x , y x,y x,y互质
同时 x x o r y = 1 x\ xor\ y=1 x xor y=1,表示 x , y x,y x,y一个为奇数,一个为偶数,所以得到在二进制下
x x x最后一位是1或0,且与y相反,其它位全是1或0
y y y最后一位是1或0,且与x相反,其它位全是1或0
当x在二进制下最后一位是1,时
x = 1 x=1 x=1或 x = 2 k − 1 x=2^k-1 x=2k−1 解析: ( 1111111 ) 2 = ( 10000000 ) 2 − 1 (1111111)_2=(10000000)_2-1 (1111111)2=(10000000)2−1
y = 0 y=0 y=0或 y = 2 k − 2 y=2^k-2 y=2k−2 解析: ( 1111110 ) 2 = ( 10000000 ) 2 − 2 (1111110)_2=(10000000)_2-2 (1111110)2=(10000000)2−2
∵ y ∈ [ 1.. n ] \because y\in [1..n] ∵y∈[1..n]
∴ x = 2 k − 1 , y = 2 k − 2 \therefore x=2^k-1,y=2^k-2 ∴x=2k−1,y=2k−2
又 ∵ k ≤ 2 ( [ l o g 2 n ] + 1 ) \because k\leq 2^{([log_2n]+1)} ∵k≤2([log2n]+1)
∴ \therefore ∴ 一共有 [ l o g 2 n ] + 1 [log_2n]+1 [log2n]+1组解
当 i = 2 i=2 i=2,则 g c d ( x , y ) = x x o r y = 2 gcd(x,y)=x\ xor\ y=2 gcd(x,y)=x xor y=2
所以 x , y x,y x,y在二进制下一定是形如这样的形式
x = 000010 x=000010 x=000010
y = 000000 y=000000 y=000000
或
x = 111110 x=111110 x=111110
y = 111100 y=111100 y=111100
∵ y ∈ [ 1.. n ] \because y\in [1..n] ∵y∈[1..n]
∴ \therefore ∴ 第一种情况不存在
∴ x = 2 k − 2 , y = 2 k − 4 \therefore x=2^k-2,y=2^k-4 ∴x=2k−2,y=2k−4
∴ \therefore ∴ 同样有 [ l o g 2 n ] + 1 [log_2n]+1 [log2n]+1组解
剩下的由于作者能力有限,推不出来了,于是就放弃了。。。