首页 > 其他分享 >对等式 gcd(x,y)=x⊕y 的一点思考

对等式 gcd(x,y)=x⊕y 的一点思考

时间:2024-07-21 16:39:49浏览次数:7  
标签:gcd cdot 整数 二进制 思考 oplus 等式

前日打算法赛时遇到了一个等式 \(\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\) 即满足条件

标签:gcd,cdot,整数,二进制,思考,oplus,等式
From: https://www.cnblogs.com/Unalome-3301/p/18314635

相关文章

  • 武汉萝卜快跑无人驾驶引发的思考。
    武汉萝卜快跑无人驾驶引发的思考。如果科技进步无法避免,那我们就想好怎么去适应它吧。无人驾驶应用,受影响最大的是出租车和网约车。一旦无人驾驶成熟,出租车和网约车基本算是退出主流。参照收储农民的土地,土地上的部分收益可以分配给农民的案例,建议是出租车和网约车可以带资入股到......
  • exgcd
    裴蜀定理对于任意整数\(a,b\)都存在整数\(x,y\),使得\(ax+by=gcd(a,b)\)扩展欧几里得算法(exgcd)设整数\(a,b,x,y\)满足\(ax+by=gcd(a,b)\)若\(b=0\),则\(x=1\),\(y\)取任意整数若\(b>0\)\[ax+by=gcd(a,b)\]\[=gcd(b,a\mod\b)\]\[=bx_0+(a\mod\b)y_0\]\[=bx_0+(a-......
  • 从强化学习到反事实思考CFL
    1.引言1.1强化学习与CFL概念的引入在人工智能领域,强化学习(ReinforcementLearning,RL)是一种让智能体通过与环境的交互来学习如何做出决策的方法。它的核心在于智能体通过尝试不同的行动并观察其带来的后果(收益或损失),从而学习到最优的行为策略。这种方法在游戏、机器人......
  • iOS开发基础133-GCD相关
    先看一段代码,这是项目中图片上传的一部分代码。//开启线程组上传图片dispatch_group_tgroup=dispatch_group_create();[self.selectedPhotosenumerateObjectsUsingBlock:^(UIImage*_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop){dispatch_gro......
  • 扩展欧几里得算法(exGcd)
    扩展欧几里得算法(ExtendedEuclideanalgorithm,EXGCD),常用于求\(ax+by=c\)的一组可行解。过程设\(ax_1+by_1=\gcd(a,b)\)\(bx_2+(a\modb)y_2=gcd(b,a\modb)\)由欧几里得算法:\(\gcd(a,b)=gcd(b,a\modb)\)所以:\(ax_1+by_1=bx_2+(a\modb)y_2\)又因为:\(a\mod......
  • iOS开发基础112-GCD
    GrandCentralDispatch(GCD)在iOS中的常见运用场景GCD是Apple提供的多线程编程技术,旨在提供高效、轻量级的方式来执行并发任务。GCD使得管理线程变得简单且提高了应用程序的性能。以下是GCD在iOS中的一些常见运用场景,并详细介绍其底层原理。1.异步任务处理场景:网络请求使用GCD......
  • MYSQL DQL in 到底会不会走索引&in 范围查询引发的思考。
    前情引子in会不会走索引?很多人肯定会回答、废话、如果命中了索引、那肯定会走。其实我和大多数人一样、一开始也是这么想的、直至有一个血淋淋的案子让我有所改观、有所思考。背景介绍业务的工单表、我们分了64张、以userId作为分表键、业务实际场景中未使用到搜索引擎、主要......
  • 【思考】:如何保证产品的交付质量?
    上周日,有个央企的测试大佬问我,在你看来,如何保证产品的交付质量? 这个问题,问的比较突然,当时我思考的时间也有限,回答的不是很好,后面我也一直在思考:产品的交付质量,该怎么保证呢。(不管是测试工具,自动化测试等等,回归到测试本身,其实我们更应该注重的是交付质量,而不是现在招测......
  • Autobots应用探索:实践中的思考与发现
    背景背景1:作为一名测试,日常工作中必不可少的几个环节是查看需求文档、编写测试用例、处理线上问题、能力提升等,基于集团的https://xxx.jd.com/工具能一次性帮我们把这些事情都做了;背景2:作为XXX共建项目的成员之一同时也是第一批用户,我用它做了几个测试实践,和大佬们一起探讨交......
  • 关于【男怕入错行】的思考
    入错行,意味着发展缓慢或者倒退。一旦该行业发生了巨变(转型升级,现在这个时代经常巨变),行业崩塌,自己的事业可能也就难以为继了。再和同龄人一对比,咦,(把握住时代机会的)TA们好优秀啊。ben发布于博客园什么是入错行呢?比如,不正确的年代大力学习某些编程语言。关键是,没有全局观,浮于......