最大公约数的几种求解及代码实现
本文讲解最大公约数求解的几种方法,实现了使用一行代码求解最大公约数,使用了C++语言进行了实现
目录
- 更相减损术
- 更相减损术的C++实现
- 辗转相除法
- 辗转相除法的C++实现
- 一行代码实现求解最大公约数
更相减损术
更相减损术出自《九章算术》,用来求解两个数的最大公约数
其操作步骤如下:
- 给定两个正整数,先判断这两个数是否都是偶数,若都为偶数,这两个数同时除以
2
,直到不满足两个数都为偶数这一条件(记除以2
的次数为n
),然后进行第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)。
创作不易,觉得写得不错就微信扫码奖励一下吧!
最大公约数的几种求解及代码实现相关推荐
- 求最大公约数的4种算法(C++)
求最大公约数的4种算法(C++) 一.实验目的 1.计算两个正整数的最大公约数和最小公倍数,并进行程序的调式与测试. 2.理解四种不同的求最大公约数的方法,学习其思维模式. 3.了解算法的概念.对问题 ...
- c语言实现求最大公约数的三种方法
一.最大公约数 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也 ...
- 迷宫问题的三种求解方法(递归求解、回溯求解和队列求解)
目录 一.迷宫问题的三种求解方法 递归求解 回溯求解 队列求解 二.华为迷宫问题 一.迷宫问题的三种求解方法 在迷宫问题中,给定入口和出口,要求找到路径.本文将讨论三种求解方法,递归求解.回溯求解和队 ...
- 求最大公约数的4种方法
一.最大公约数与最小公倍数 最大公约数,属于数论所探究的内容. 最大公约数可以通过下面的三种方法求出来. 最小公倍数呢,它与最大公约数的乘机为所求数之积. 比如求 x,y的最大公约数和最小公倍数 记住 ...
- 最大公约数的四种方法
最大公约数的四种方法 前言 1.暴力穷举法 2.辗转相除法 步骤 原理 证明: 3.更相减损法 步骤 原理 证明: 比较 4.stein算法 比较 原理 步骤 前言 求两数的最大公约数,一共有四种方法 ...
- 硬核!Python 四种变量的代码对象和反汇编分析
作者 | 大奎 整理 | 阳哥 来源丨Python数据之道 在Python基础的学习过程中,对变量和参数的理解有助于我们从更基础层面了解Python语言的运行.在这个过程中,还是有不少冷门和细节的地方 ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- ML之分类预测:分类预测评估指标之AUC计算的的两种函数具体代码案例实现
ML之分类预测:分类预测评估指标之AUC计算的的两种函数具体代码案例实现 目录 分类预测评估指标之AUC计算的的两种函数代码案例实现 输出结果 实现代码
- java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解
废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...
最新文章
- mysql5.7文本编辑器_Windows下mysql-5.7.28下载、安装、配置教程
- 1.15 Java 9新增的不可变集合
- 15_多子图-Subplot、Subplot: 使用多个figures和 axes、替代解决方案:
- html中的特性是什么,数据库的四大特性是什么
- 微软已暂时停用你的帐户_Apple ID 被停用如何解决?
- c++ vs 输出log到窗口_欧冠豪门碰撞,尤文vs巴萨,曼联vs红牛
- JDK的下载、安装和配置
- 核心指导网络由任务编码器_指导新编码员的最佳做法
- mysql 重要维护工具 图解
- Transformer、BERT细节基础知识点
- android pdf阅读开发
- 为了寻找当下最好的照片备份方式,我写了7000字的长文...
- 手机游戏开发工程师培训教程
- svn 服务器日志位置,svn服务器查看日志
- wincc怎么做数据库_wincc 数据库的连接方法
- 气象插值软件anusplin的使用
- mysql desc select_数据库里 desc 和 select 怎么用,代表什么意思?
- 基于SSM+MySQL实现的酒店管理系统
- common-pool2的介绍和使用
- 《计算机网络》章节重要概念