SSL-1249 思考过程

题目

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)ab,a xor bab
∴ c = a − b \therefore c=a-b c=ab
∴ b = a − c \therefore b=a-c b=ac
∴ 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,ac)=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 ac=a xor c g c d ( a , a − c ) = c gcd(a,a-c)=c gcd(a,ac)=c
到这100分,具体做法:同样知道a是c的倍数,但此时不需要计算gcd,复杂度O(nlogn)


思路2(非正确,仅供参考)

首先 a ≥ b a\geq b ab,所以有
1 &lt; = a   x o r   b &lt; 2 ( [ l o g 2 a ] + 1 ) 1&lt;=a\ xor\ b&lt;2^{([log_2a]+1)} 1<=a xor b<2([log2a]+1)
1 &lt; = g c d ( a , b ) &lt; = b 1&lt;=gcd(a,b)&lt;=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=2k1 解析: ( 1111111 ) 2 = ( 10000000 ) 2 − 1 (1111111)_2=(10000000)_2-1 (1111111)2=(10000000)21
y = 0 y=0 y=0 y = 2 k − 2 y=2^k-2 y=2k2 解析: ( 1111110 ) 2 = ( 10000000 ) 2 − 2 (1111110)_2=(10000000)_2-2 (1111110)2=(10000000)22
∵ 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=2k1,y=2k2
∵ k ≤ 2 ( [ l o g 2 n ] + 1 ) \because k\leq 2^{([log_2n]+1)} k2([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=2k2,y=2k4
∴ \therefore 同样有 [ l o g 2 n ] + 1 [log_2n]+1 [log2n]+1组解


剩下的由于作者能力有限,推不出来了,于是就放弃了。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值