对等式 gcd(x,y)=x⊕y 的一点思考
前日打算法赛时遇到了一个等式 \(\gcd(x, y) = x \oplus y\),要求给定 \(x\) 在最短时间内求得满足条件的一个 \(y\) 。
赛中使用了暴力找规律大法过了,赛后决定认真严谨证明一下满足条件的 \(y\) 的相关性质,于是有了这篇文章(
Part 1: \(x\) 是奇数
先介绍【异或配对性定理】:若 \(a\) 为任意非负偶数,则必有 \(a⊕1=(a+1)\) 。
利用这个定理,再由 异或的可交换性 和 大于2且相邻的两个数必互质,故当 \(x\) 为奇数时,\(y=x-1\) 即满足等式条件。
Part 2: \(x\) 是偶数且为 2 的整数幂
设 \(x = 2^k\),其中 \(k\) 是非负整数。由于 \(x\) 是 2 的整数幂,二进制表示中只有一位是 1,其余位均为 0 。
为了找出满足 \(\gcd(x, y) = x \oplus y\) 的正整数 \(y\),我们需要检查 \(\gcd(x, y)\) 和 \(x \oplus y\) 的二进制表示。
-
二进制性质:
- \(x\) 的二进制表示只有一位是 1,其余全是 0。
- \(y\) 是一个正整数,具有任意的二进制表示。
-
按位异或的性质:
- \(x \oplus y\) 表示 \(x\) 和 \(y\) 之间的按位异或操作,对于相同位是 0,不同位是 1。
- 由于 \(x\) 只有一位是 1,所以 \(x \oplus y\) 会在 \(x\) 的那个 1 位与 \(y\) 的相应位不同时为 1,否则为 0。
-
\(\gcd\) 的性质:
- \(\gcd(x, y)\) 是 \(x\) 和 \(y\) 的最大公约数。
- 由于 \(x\) 是 2 的整数幂,因此 \(x\) 的所有因子也都是 2 的整数幂。
现在假设存在一个正整数 \(y\),使得 \(\gcd(x, y) = x \oplus y\)。由于 \(x\) 所有因子都必须是 2 的幂。假设 \(y = 2^m + 2^n + \cdots\),其中 \(0\leq m, n, ... \leq k\) 均为整数。
- \(\gcd(x, y)\) 必须是 2 的某个幂,因为 \(x\) 和 \(y\) 的公因子只能是 2 的幂。
- \(x \oplus y\) 如果有多于一位 1,则不是 2 的幂,不能是 \(\gcd(x, y)\)。
因此 \(\gcd(x, y) = x \oplus y\) 不能成立,因为 \(x \oplus y\) 不可能保持 2 的幂的形式,而 \(\gcd(x, y)\) 必须是 2 的幂。
Part 3: \(x\) 是偶数但不是 2 的整数幂
设 \(x = 2^k \cdot m\),其中 \(m\) 是奇数且 \(k > 0\) 。
-
寻找 \(x\) 最多能被 2 的多少次方整除:
- \(x\) 可以被 \(2^k\) 整除,因为 \(x = 2^k \cdot m\)
- \(y = x - 2^k = 2^k \cdot m - 2^k = 2^k(m - 1)\)
-
验证 \(\gcd(x, y)\):
- \(\gcd(x, y) = \gcd(2^k \cdot m, 2^k(m - 1))\)
- \(\gcd(2^k \cdot m, 2^k \cdot (m - 1)) = 2^k \cdot \gcd(m, m - 1)\)
- 由于 \(m\) 和 \((m-1)\) 是相邻的整数,所以有 \(\gcd(m, m - 1) = 1\)
- 因此 \(\gcd(x, y) = 2^k\)
-
验证 \(x \oplus y\):
- \(x \oplus y = 2^k \cdot m \oplus 2^k (m - 1)\)
- 由于 \(x\) 和 \(y\) 只有 \(2^k\) 的系数不同,其余相同。(即左移位数相同)
- 因此 \(x \oplus y = 2^k\cdot(m \oplus (m-1))=2^k\)
Part 4 : 综上所述
对于满足等式 \(gcd(x,y)=x⊕y\) 的 \(y\):
- 当 \(x\) 是奇数时,取 \(y=x-1\) 即满足条件
- 当 \(x\) 是偶数且为 2 的整数幂,\(y\) 不存在
- 当 \(x\) 是偶数但不是 2 的整数幂,选择 \(y = x - 2^k\) 即满足条件