对等式 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\) 的二进制表示。

  1. 二进制性质:

    • \(x\) 的二进制表示只有一位是 1,其余全是 0。
    • \(y\) 是一个正整数,具有任意的二进制表示。
  2. 按位异或的性质:

    • \(x \oplus y\) 表示 \(x\)\(y\) 之间的按位异或操作,对于相同位是 0,不同位是 1。
    • 由于 \(x\) 只有一位是 1,所以 \(x \oplus y\) 会在 \(x\) 的那个 1 位与 \(y\) 的相应位不同时为 1,否则为 0。
  3. \(\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\)

  1. 寻找 \(x\) 最多能被 2 的多少次方整除:

    • \(x\) 可以被 \(2^k\) 整除,因为 \(x = 2^k \cdot m\)
    • \(y = x - 2^k = 2^k \cdot m - 2^k = 2^k(m - 1)\)
  2. 验证 \(\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\)
  3. 验证 \(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\) 即满足条件
posted @ 2024-07-21 16:43  Unalome  阅读(45)  评论(0编辑  收藏  举报