本文讲解最大公约数求解的几种方法,实现了使用一行代码求解最大公约数,使用了C++语言进行了实现

目录

  • 更相减损术
  • 更相减损术的C++实现
  • 辗转相除法
  • 辗转相除法的C++实现
  • 一行代码实现求解最大公约数

更相减损术

更相减损术出自《九章算术》,用来求解两个数的最大公约数
其操作步骤如下:

  1. 给定两个正整数,先判断这两个数是否都是偶数,若都为偶数,这两个数同时除以2,直到不满足两个数都为偶数这一条件(记除以2的次数为n),然后进行第2
  2. 若两个数不都为偶数,用较大的数去减较小的数,重复这一过程,直到减数(较小的那个数)和差相等(计为d)为止
  • 则最大公约数为除了多少次2的乘积再乘以相等的数,即: 2 n × d 2^n\times d 2n×d

更相减损术的C++实现

代码实现如下:

#include <iostream>
using namespace std;
int divisor(int a,int b){int ans=1;while(a%2==0&&b%2==0){a=a/2;b=b/2;ans*=2;}while(a!=b){if(a>b){a=a-b;}else{b=b-a;}}return ans*a;
}
int main(){int a,b;a=4,b=6;cout<<divisor(a,b);return 0;
}

运行结果为:

2

辗转相除法

  • 以除数和余数反复做除法运算,当余数为0时,当前的除数为所要求的最大公约数

辗转相除法的C++实现

#include <iostream>
using namespace std;
int divisor(int a,int b){if(b==0){return a;}else{divisor(b,a%b);}
}
int main(){int a,b;a=4,b=6;cout<<divisor(a,b);return 0;
}

运行结果为:

2

一行代码实现求解最大公约数

将辗转相除法进行优化,将上面代码中的divisor函数优化为:

int divisor(int a,int b){return b?divisor(b,a%b):a;}

完整的一行代码求解最大公约数的代码为:

#include <iostream>
using namespace std;
int divisor(int a,int b){return b?divisor(b,a%b):a;}
int main(){int a,b;a=4,b=6;cout<<divisor(a,b);return 0;
}

运行结果为:

2

才疏学浅,难免有错误和不当之处,欢迎交流批评指正!
同时有问题的话欢迎留言或邮箱联系(ljt_IT@163.com)。

创作不易,觉得写得不错就微信扫码奖励一下吧!

最大公约数的几种求解及代码实现相关推荐

  1. 求最大公约数的4种算法(C++)

    求最大公约数的4种算法(C++) 一.实验目的 1.计算两个正整数的最大公约数和最小公倍数,并进行程序的调式与测试. 2.理解四种不同的求最大公约数的方法,学习其思维模式. 3.了解算法的概念.对问题 ...

  2. c语言实现求最大公约数的三种方法

    一.最大公约数 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也 ...

  3. 迷宫问题的三种求解方法(递归求解、回溯求解和队列求解)

    目录 一.迷宫问题的三种求解方法 递归求解 回溯求解 队列求解 二.华为迷宫问题 一.迷宫问题的三种求解方法 在迷宫问题中,给定入口和出口,要求找到路径.本文将讨论三种求解方法,递归求解.回溯求解和队 ...

  4. 求最大公约数的4种方法

    一.最大公约数与最小公倍数 最大公约数,属于数论所探究的内容. 最大公约数可以通过下面的三种方法求出来. 最小公倍数呢,它与最大公约数的乘机为所求数之积. 比如求 x,y的最大公约数和最小公倍数 记住 ...

  5. 最大公约数的四种方法

    最大公约数的四种方法 前言 1.暴力穷举法 2.辗转相除法 步骤 原理 证明: 3.更相减损法 步骤 原理 证明: 比较 4.stein算法 比较 原理 步骤 前言 求两数的最大公约数,一共有四种方法 ...

  6. 硬核!Python 四种变量的代码对象和反汇编分析

    作者 | 大奎 整理 | 阳哥 来源丨Python数据之道 在Python基础的学习过程中,对变量和参数的理解有助于我们从更基础层面了解Python语言的运行.在这个过程中,还是有不少冷门和细节的地方 ...

  7. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

  8. ML之分类预测:分类预测评估指标之AUC计算的的两种函数具体代码案例实现

    ML之分类预测:分类预测评估指标之AUC计算的的两种函数具体代码案例实现 目录 分类预测评估指标之AUC计算的的两种函数代码案例实现 输出结果 实现代码

  9. java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...

最新文章

  1. mysql5.7文本编辑器_Windows下mysql-5.7.28下载、安装、配置教程
  2. 1.15 Java 9新增的不可变集合
  3. 15_多子图-Subplot、Subplot: 使用多个figures和 axes、替代解决方案:
  4. html中的特性是什么,数据库的四大特性是什么
  5. 微软已暂时停用你的帐户_Apple ID 被停用如何解决?
  6. c++ vs 输出log到窗口_欧冠豪门碰撞,尤文vs巴萨,曼联vs红牛
  7. JDK的下载、安装和配置
  8. 核心指导网络由任务编码器_指导新编码员的最佳做法
  9. mysql 重要维护工具 图解
  10. Transformer、BERT细节基础知识点
  11. android pdf阅读开发
  12. 为了寻找当下最好的照片备份方式,我写了7000字的长文...
  13. 手机游戏开发工程师培训教程
  14. svn 服务器日志位置,svn服务器查看日志
  15. wincc怎么做数据库_wincc 数据库的连接方法
  16. 气象插值软件anusplin的使用
  17. mysql desc select_数据库里 desc 和 select 怎么用,代表什么意思?
  18. 基于SSM+MySQL实现的酒店管理系统
  19. common-pool2的介绍和使用
  20. 《计算机网络》章节重要概念

热门文章

  1. 当人工智能(AI)撞上供应链
  2. matplolib种横坐标斜着显示
  3. 芋道 Spring Boot JPA 入门(一)之快速入门
  4. Windows下MySQL5.5安装,配置与卸载
  5. 【小程序】QQ小程序的入门与开发
  6. python 操作excel
  7. 简易番茄时钟web实现
  8. H3C设备链路聚合(LACP/PAGP)
  9. 中国工程院新增选54名院士
  10. 如何优雅地实现C++编译期多态?