详解C语言求两个数的最大公约数及最小公倍数的方法

求两个正整数的最大公约数

思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) (x >=y > 0)。根据通式写出算法不难,这里就不给出了。这里给出《编程之美》上的算法,主要是为了减少迭代的次数。

对于x和y,如果y = k * y1, x= k * x1,那么f(x, y) = k * f(x1, y1)。另外,如果x = p * x1,假设p为素数,并且y % p != 0,那么f(x, y) = f(p * x1, y) = f(x1, y)。取p = 2。

参考代码:

//函数功能: 求最大公约数

//函数参数: x,y为两个数

//返回值: 最大公约数

int gcd_solution1(int x, int y)

{

if(y == 0)

return x;

else if(x < y)

return gcd_solution1(y, x);

else

{

if(x&1) //x是奇数

{

if(y&1) //y是奇数

return gcd_solution1(y, x-y);

else //y是偶数

return gcd_solution1(x, y>>1);

}

else //x是偶数

{

if(y&1) //y是奇数

return gcd_solution1(x>>1, y);

else //y是偶数

return gcd_solution1(x>>1, y>>1) << 1;

}

}

}

求最小公倍数:最常用的是辗转相除法,有两整数a和b:

① a%b得余数c

② 若c=0,则b即为两数的最大公约数

③ 若c≠0,则a=b,b=c,再回去执行①

下面非递归版本:

int gcd_solution2(int x, int y)

{

int result = 1;

while(y)

{

int t = x;

if(x&1)

{

if(y&1)

{

x = y;

y = t % y;

}

else

y >>= 1;

}

else

{

if(y&1)

x >>= 1;

else

{

x >>= 1;

y >>= 1;

result <<= 1;

}

}

}

return result * x;

}

相关阅读:

详解Swift语言中的类与结构体

仿orm自动生成分页SQL分享

解析JavaScript中点号“.”的多义性

js实现select跳转功能代码

如何判断PC端浏览器内核

C#中string用法实例详解

JavaScript电子时钟倒计时第二款

详解Javascript 装载和执行

Android中Intent机制详解及示例总结(总结篇)

Mac如何设置丢失模式?查找我的Mac用法详解

IIS+fastcgi下PHP运行超时问题的解决办法详解

浅谈bootstrap源码分析之tab(选项卡)

PHP中strlen()和mb_strlen()的区别浅析

PHPUnit安装及使用示例

php怎么求最小公倍数,C++_详解C语言求两个数的最大公约数及最小公倍数的方法,求两个正整数的最大公约数nbs - phpStudy...相关推荐

  1. java数组是行优先还是列优先的语言_详解C语言数组中是以列优先吗

    如果我们按照C语言的方式存储它,也就是行优先存储的话,那么在内存中,它的形状是这样的: 这种存储方式又被称作C contiguous array. C语言数组结构列优先顺序存储的实现 (GCC编译). ...

  2. can协议crc计算_详解CAN/CAN FD通信中的循环冗余校验(CRC)方法

    数据校验是为保证数据的完整性进行的一种验证操作.CAN通信采用CRC校验作为一种重要的错误检测手段,是节点判断CAN帧信息的完整性并产生确认应答的依据. 在现场总线通信和控制的实际应用中,工业应用环境 ...

  3. python中__init__后面加特殊符号_详解Python中的__new__、__init__、__call__三个特殊方法...

    __new__: 对象的创建,是一个静态方法,第一个参数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个参数是sel ...

  4. python预处理c语言_详解C语言编程中预处理器的用法

    预处理最大的标志便是大写,虽然这不是标准,但请你在使用的时候大写,为了自己,也为了后人. 预处理器在一般看来,用得最多的还是宏,这里总结一下预处理器的用法. #include #define MACR ...

  5. python中列表和元组的相同点和不同点_详解Python语言中元组和列表的区别

    本篇介绍Python中的元组数据类型,文中会讨论元组与列表的区别,元组的声明.赋值及其相关运算.通过本篇的学习,可以达成如下目标. ● 掌握元组和列表的区别 ● 掌握元组的声明和赋值 ● 掌握适用于元 ...

  6. 微信小程序 渲染层网络错误_详解微信小程序「渲染层网络层错误」的解决方法...

    问题描述: 情况是这样的,我需要在小程序中通过image标签显示三张我的图片,毫无疑问,其重点部分肯定在image的src属性上,请看思路分析: 我们可以新建一个专门放图片的文件夹,然后将我们项目所需 ...

  7. 直角坐标和求坐标的转换详解-关于球坐标转换为直角坐标正负号相反问题

    最近项目用到直角坐标转换到球坐标,处理后再转回直角坐标作为最后的结果输出,结果发现转回去的直接坐标有的符号是相反的,找到原因记录如下. 1.直角坐标和求坐标的转换详解 其中关于角度反正切的计算可直接用 ...

  8. 大脑构造图与功能解析_大脑的结构和功能分区_详解人脑构造与功能

    大脑的结构和功能分区 _ 详解人脑构造与功能 学习,可以开阔人的大脑 ; 学习,可以使人的大脑拥有更多的知识,人的大脑和肢 体一样,多用则灵,不用则废.那么下面学习啦小编给大家分享一些大脑的结构和功 ...

  9. 扩展Euclidean算法求乘法逆原理详解与算法实现

    [利用扩展Euclidean算法求乘法逆] 1. Equipment (1) operating system version :WIN 10 (2) CPU instruction set: x 6 ...

最新文章

  1. pushpop指令的操作数必须是字操作数_指令格式
  2. Virtura box 构建一个简单局域网并联入外网
  3. OleCommand的SqlText占位符的问题
  4. 设计模式之Future模式——提交任务后立即得到一个Future对象,后面利用该对象得到具体的执行结果。加上回调功能,任务执行结束通知调用者或直接回调相应方法
  5. 执行phpinfo();时提示:date_default_timezone_set()
  6. Zipkin-1.19.0学习系列1:java范例
  7. GitHub Universe 2021|MS Reactor 邀你共聚年度盛会
  8. 蓝桥杯 ADV-119 算法提高 6-9删除数组中的0元素
  9. matlab 数字基带,基于MATLAB的数字基带传输的 FIR滤波器的设计
  10. 对路径“C:\Program Files (x86)\gwssi\CPC客户端\CheckWord.xml”的访问被拒绝。
  11. ARCore快速入门-02导入ARCore For Unity
  12. php批量打印快递单,ecshop批量打印快递单的方法
  13. 修复漏洞显示连接服务器失败,服务器安全狗漏洞补丁失败怎么办
  14. (二)史玉柱:我的营销心得有感------主要关注网络游戏策划
  15. [MFC] CList
  16. springboot整合Hystrix 熔断器
  17. c#拼图碎片形状_将碎片拼成完整的拼图
  18. 基于微信小程序的师生答疑交流平台APP
  19. 注解@Primary
  20. EasyAR_SDK在unity制作ar视频黑屏,只有声音问题

热门文章

  1. 2029年计算机考试题目,计算机二级题集
  2. html placeholder 兼容问题,解决placeholder的兼容性
  3. 哪些系统使用了linux内核,Linux操作系统有哪些
  4. eclipse 2019-12版本安装svn
  5. shell正则表达式截取字符串_从CVE20208816聊聊shell参数扩展
  6. java三目表达式_史上最强《Java 开发手册》泰山版王者归来
  7. 下载的长数据怎么分开R语言_R语言学习笔记(一):学代码,我们从最基础的开始...
  8. python 彩票分析_294期钱哥福彩3D预测奖号:杀号分析
  9. delete优化_深入理解JIT和编译优化
  10. linux清空垃圾箱的命令,在Linux系统下安装Autotrash并使用Autotrash自动清空垃圾箱...