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