求解gcd最大公约数的两种算法

2023-05-16

文章目录

  • 1.更相减损术
  • 2.辗转相除法
  • 3.两种算法的比较

1.更相减损术

即:辗转相减法。是由我国古代《九章算术》提出的一种求解最大公约数(Grand Central Dispatch)的算法。

代码示例:

int f(int a, int b) {    
	if (a==b) return a;    
	if (a<b) { //交换值        
	a^=b; b^=a; a^=b;    
	}    
	a-=b;    
	return f(a, b);
}

2.辗转相除法

代码示例:

int f_(int a, int b) {
	if (a%b ==0) return b;
	return f_(b, a%b); //因为对一个数求模结果一定小于第二个操
			   //作数,因此不需要再排序
}

当然,依靠不需要额外变量的异或运算进行数值交换可以衍生出很多种极为精简的写法,这里不再赘述。

3.两种算法的比较

这里我用这两种算法分别进行了1000次的计算,累计它们迭代的次数总和。
更相减损术的迭代次数总和是67570,而辗转相除法的迭代次数总和是8695。(每次两个函数接收到的数据相同,但数据由随机函数生成)

我们都知道取模肯定会比做减法获得数值上更大的下降率,所以在迭代次数方面后者更低很容易理解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

求解gcd最大公约数的两种算法 的相关文章

  • cannot import name ‘gcd’ from ‘fractions’

    cannot import name gcd from fractions 在这里插入图片描述 在3 9
  • 了解GCD

    目录 一 GCD简介 二 GCD好处 三 GCD任务和队列 1 任务 同步执行 xff08 sync xff09 xff1a 异步执行 xff08 async xff09 xff1a 2 队列 串行队列 xff08 Serial Dispa
  • BZOJ1876 [SDOI2009]SuperGCD 【高精 + GCD优化】

    题目 Sheng bill有着惊人的心算能力 xff0c 甚至能用大脑计算出两个巨大的数的GCD xff08 最大公约 数 xff09 xff01 因此他经常和别人比 赛计算GCD 有一天Sheng bill很嚣张地找到了你 xff0c 并
  • 数论——GCD

    ZOJ Problem Set 3846 题意 xff1a 给 N 个数 xff0c 任取两个数Ai Aj xff0c 求出这两数的GCD xff0c 然后用GCD替换这两个数的值 直至这n个数的值都相等为止 xff0c 此时输出求GCD的
  • 证明,若gcd(n,i) == 1,那么gcd(n,n-i)==1

    证明 xff0c 若gcd n i 61 61 1 那么gcd n n i 61 61 1 解 xff1a 设gcd n i 61 61 1 gcd n n i 61 61 k 61 1 那么n与 n i 的最大公约数为k n k 61 6
  • 求解gcd最大公约数的两种算法

    文章目录 1 更相减损术2 辗转相除法3 两种算法的比较 1 更相减损术 即 xff1a 辗转相减法 是由我国古代 九章算术 提出的一种求解最大公约数 Grand Central Dispatch 的算法 代码示例 xff1a span c
  • 【题解】洛谷P2651 添加括号III(gcd 数学)

    看到是入门难度结果看了半天也不知道啥做法 kkk大神给出了答案 xff0c a1肯定在分子上 xff0c a2肯定在分母上 xff0c 如果我们想让这个式子更有可能化成整数 xff0c 那么a1 a3 a4 an都应该在分子上 xff0c
  • 数学方法证明辗转相除法(欧几里得算法):gcd(a,b)=gcd(b,a%b)

    纯数学方法证明辗转相除法 xff08 欧几里得算法 xff09 xff1a gcd a b 61 gcd b a b 1 首先 设gcd a b 61 gcd b a b 61 d 2 构造k与c 得到a 61 kb 43 c 其中c 61
  • GCD【洛谷P2568】(小左的GCD)

    题目描述 给定整数N xff0c 求1 lt 61 x y lt 61 N且Gcd x y 为素数的数对 x y 有多少对 输入格式 一个整数N 输出格式 答案 输入输出样例 输入 1 复制 4 输出 1 复制 4 说明 提示 对于样例 2
  • 基础算法题——奇怪的分式(避免小数运算)

    奇怪的分式 上小学的时候 小明经常自己发明新算法 一次 老师出的题目是 1 4 乘以 8 5 小明居然把分子拼接在一起 分母拼接在一起 答案是 18 45 参见图1 png 老师刚想批评他 转念一想 这个答案凑巧也对啊 真是见鬼 对于分子
  • iOS进阶_GCD(二.GCD串行队列&并发队列)

    GCD 核心概念 将任务添加到队列 指定任务执行的方法 任务 使用block封装 block 就是一个提前准备好的代码块 在需要的时候执行 队列 负责调度任务 串行队列 一个接一个的调度任务 并发队列 可以同时调度多个任务 任务执行函数 任
  • 最大公约数、最小公倍数、辗转相除法的求解和证明

    两个正整数的最大公约数 Greatest Common Divisor GCD 在计算机中通常使用辗转相除法计算 最小公倍数 Least Common Multiple LCM 可以使用GCD来计算 下面首先介绍GCD和LCM 然后介绍辗转
  • 3045 Lcm与Gcd构造

    已知 gcd a b n lcm a b m 求min a b 是多少 通过gcd的了解我们可以知道 两个数a k1 n以及b k2 n并且gcd k1 k2 1 ab n m m a b n ab k1 k2 n n 于是可以得到 m k
  • 使用GCD处理后台线程和UI线程的交互(转自唐巧的技术博客)

    使用GCD FEB 22ND 2012 什么是GCD Grand Central Dispatch GCD 是Apple开发的一个多核编程的解决方法 该方法在Mac OS X 10 6雪豹中首次推出 并随后被引入到了iOS4 0中 GCD是
  • 扩展欧几里得算法

    扩展欧几里得算法是啥 那就要先知道什么是欧几里得算法 欧几里得算法 扩展欧几里得算法是欧几里得算法的推广 利用欧几里得算法的思想和递归求得贝祖等式a x b y gcd a b 不定方程中的一组x和y的解 原理如下 设a gt b 当b 0
  • 一个奇怪的GCD内存不释放的问题

    这个问题是我的同学提出来的 原帖在http bbs csdn net topics 390933411 大概是这样 pre class objc IBAction touchToCreateThread id sender int i 10
  • 最大公约数GCD

    输入2个正整数A B 求A与B的最大公约数 Input2个数A B 中间用空格隔开 1 lt A B lt 10 9 Output输出A与B的最大公约数 Sample Input 30 105 Sample Output 15 includ
  • 最大比例

    题目描述 解析 接下来就是求解k和p的过程 在这道题中很难使用欧几里得算法就求解最大公约数 因此尝试使用另一种方法 更相减损术 循环相减法 如果要使用欧几里得算法的话 就需要开一个非常复杂的根号 非常难算 代码 include
  • Two Divisors【GCD数论】

    You are given nn integers a1 a2 ana1 a2 an For each aiai find its two divisors d1 gt 1d1 gt 1 and d2 gt 1d2 gt 1 such th
  • iOS线程初探(四) GCD 和 NSOperation 小结

    参考资料 关于iOS多线程 看我就够了 GCD 在GCD中 有两个概念很重要 那就是任务和队列 任务 其实就是你需要做的事情 一个Block而已 任务有两种执行方式 同步执行和异步执行 同步执行 会阻塞当前线程 直至该任务执行完成后当前线程

随机推荐

  • 古代有一个梵塔,塔内有 A、B、C 三个基座,A 座上有 64 个盘子,盘子大小不等,大的在下,小的在上

    古代有一个梵塔 xff0c 塔内有 A B C 三个基座 xff0c A 座上有 64 个盘子 xff0c 盘子大小不等 xff0c 大的在下 xff0c 小的在上 有人想把这 64 个盘子 从 A 座移到 C 座 xff0c 但每次只允许
  • 修改mysql 8.0密码

    1 首先说明 xff1a 正确的修改密码方式 xff1a span class token constant ALTER span span class token constant USER span span class token s
  • P1591 阶乘数码洛谷

    题目描述 求n 中某个数码出现的次数 输入格式 第一行为t 10 xff0c 表示数据组数 接下来t行 xff0c 每行一个正整数n 1000 和数码a 输出格式 对于每组数据 xff0c 输出一个整数 xff0c 表示n 中a出现的次数
  • 多神经网络轨迹跟随控制(MATLAB实现)

    多神经网络轨迹跟随控制 xff08 MATLAB实现 xff09 本文是我基于自己的理解实现的多神经轨迹跟随控制 xff0c 可能不太正确 xff0c 但仍记录下来 此题目当我刚看到的时候一头雾水 xff0c 经过看PPT和自己实践貌似搞出
  • turtlebot3 Slam建图和导航仿真

    turtlebot3 Slam建图和导航仿真 使用RViz仿真Turtlebot3 RViz简介 RViz是ROS的三维可视化工具 它的主要目的是以三维方式显示ROS消息 xff0c 可以将数据进行可视化表达 例如无需编程即可表达激光测距仪
  • 【MATLAB APPdesigner ui设计实现软件动态页面启动 】(启动无标题栏)

    MATLAB APPdesigner实现软件动态页面启动 xff08 启动无标题栏 xff09 前言实现实现动态界面启动隐藏动态界面启动的标题栏 前言 最近需要验收利用MATLAB所实现的控制系统 xff0c 为了更好的展示 xff0c 因
  • 激光雷达方程推导与激光器参数指标

    激光雷达方程推导与激光器参数指标 激光雷达方程推导多种目标类型下的激光雷达方程激光器的参数指标 激光雷达方程推导 设定目标与激光雷达的距离为 R R R xff0c 发射激光束的发散角为
  • mpc模型预测控制原理详解

    mpc模型预测控制原理详解 前言mpc算法步骤mpc算法推导 前言 本文是对mpc模型预测控制学习的记录 xff0c 主要参照了DR CAN老师的视频进行学习 视频专栏链接 xff1a DR CAN老师mpc视频专栏 在这篇博客中博主也针对
  • C++基础回顾(上)

    C 43 43 基础回顾 xff08 上 xff09 目录 C 43 43 基础回顾 xff08 上 xff09 前言关键字和标识符运算符数据类型函数类 前言 C 43 43 之前学过一点 xff0c 但是很长时间都没用过 xff0c 翻出
  • 自适应控制专栏目录及介绍

    目录 自适应控制专栏目录及介绍第一篇 xff1a 具有不确定参数系统的自适应跟踪控制设计 ADi hhh的博客 CSDN博客 https blog csdn net qq 45830323 article details 129713051
  • 【五一创作】Qt quick基础1(包含基本元素Text Image Rectangle的使用)

    Qt quick基础1 xff08 包含基本元素Text Image Rectangle的使用 xff09 目录 Qt quick基础1 xff08 包含基本元素Text Image Rectangle的使用 xff09 前言qt中有直接设
  • 网站使用微信登录接口,所踩的坑...

    一 如何开通微信公众号 微信开发平台 授权认证 接口权限申请等等 xff0c 这些不在本文描述 xff0c 请参考官方资料 二 假设已顺利完成第一步的工作 xff0c 现在需要在自己开发的网站 xff08 PC端 移动端 xff0c 注意两
  • Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊)

    Qt quick基础2 xff08 包含平移旋转放缩以及qml控件大写开头啊 xff09 目录 Qt quick基础2 xff08 包含平移旋转放缩以及qml控件大写开头啊 xff09 前言简单的平移 旋转和放缩其他元素的一些基本使用qml
  • 虚幻引擎配置物体水面浮力的简便方法

    虚幻引擎配置物体水面浮力的简便方法 目录 虚幻引擎配置物体水面浮力的简便方法前言前期工作配置水面浮力针对一个立方体的水面浮力配置针对船3D模型的水面浮力配置 小结 前言 在使用虚幻引擎配置导入的3D模型时 xff0c 如何快速地将水面浮力配
  • 用栈实现回文字符串的判断

    用栈实现回文字符串的判断 栈是一种后进先出的数据结构 xff0c 它只能在一段进行插入和删除操作 例如一个字符串 34 12321 34 像这种 xff0c 无论正读反读均相同的字符序列 xff0c 就叫做回文字符串 首先 xff0c 我们
  • 安装diffuse 解决dpkg依赖问题

    安装diffuse报错 xff0c 缺少依赖 xff0c 安装地址 flynnsin 64 flynnsin Downloads span class token function sudo span dpkg span class tok
  • 软件工程整理

    软件工程总结 第一章1 软件2 软件工程3 软件工程环境4 三种编程范例 第二章1 软件生存周期2 软件生存周期的主要活动 3 软件过程 第三章1 结构化分析SA2 DFD xff08 数据流 xff09 图3 结构化设计SD xff08
  • TCP客户端增加多线程与TCP服务端增加多线程

    TCP客户端增加多线程 xff08 ps xff1a 仅有代码 xff0c 小伙伴们利用百度 xff0c 冲啊 xff01 xff01 xff01 xff09 span class token comment coding 61 utf 8
  • 梯度下降与矩阵分解

    1 梯度下降 梯度下降属于迭代法的一种 xff0c 所谓迭代法就是不断用变量的旧值得到新值的方法 在求解损失函数最小值的时候 xff0c 可以通过梯度下降法来一步步迭代求出最小化的损失函数和模型参数值 梯度 xff1a 对于一元函数来说 x
  • 求解gcd最大公约数的两种算法

    文章目录 1 更相减损术2 辗转相除法3 两种算法的比较 1 更相减损术 即 xff1a 辗转相减法 是由我国古代 九章算术 提出的一种求解最大公约数 Grand Central Dispatch 的算法 代码示例 xff1a span c