求GCD(最大公约数)的两种方式
求GCD(最大公约数)的两种方式
这篇随笔讲解C++语言程序设计与应用中求GCD(最大公约数,下文使用GCD代替)的两种常用方式:更相减损法和辗转相除法,前提要求是具有小学数学的基本素养,知道GCD是什么,并具有C++的语法基础。
一、更相减损法
两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。
(这是我国人民智慧的结晶)
我来介绍一下这个算法的优点,就是避免了大整数取模导致效率低下,但是运算次数要比辗转相除多得多,所以我们在使用的时候需要判断一下。
代码:
int gcd(int a,int b)
{
if(a==b)
return a;
if(a>b)
return gcd(a-b,b);
if(a<b)
return gcd(b-a,a);
}
二、辗转相除法
两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。
其实就是把更相减损变得更高级一点(加减运算变乘除运算,提升了一个级别)
但是大整数取模会让一些题极为头疼,所以我们还是要慎重考虑什么时候用更相减损什么时候用辗转相除。
(同样是我国人民智慧的结晶)
代码:
int gcd(int a,int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}
条件表达式写法:
是辗转相除法的一个简便写法,只用一行即可搞定:
int gcd(int x,int y)
{
return y?gcd(y,x%y):x;
}
下课!祝同学们AK IOI!!!
求GCD(最大公约数)的两种方式的更多相关文章
- R语言两种方式求指定日期所在月的天数
R语言两种方式求指定日期所在月的天数 days_monthday<-function(date){ m<-format(date,format="%m& ...
- Codeforces Round #466 (Div. 2) B. Our Tanya is Crying Out Loud[将n变为1,有两种方式,求最小花费/贪心]
B. Our Tanya is Crying Out Loud time limit per test 1 second memory limit per test 256 megabytes inp ...
- 数位dp初步——数位dp的两种方式
数位dp:一类统计区间[L,R]内某种符合规定的数字个数的题目.特征是R的范围会很大,O(N)范围内无法完成. 一般而言,解决这类题目有两种方式,一种是递推,另一种是记忆化搜索. 递推: 1)利用dp ...
- [算法基础]斐波那契(recursion+loop)两种方式执行时间对比
一.斐波那契数列求第n项两种方式 1.递归(自上而下)def recur_fibonacci(n): if n <= 0: return 0 if n == 1: return 1 return ...
- Unity调用Android的两种方式:其一、调用jar包
unity在Android端开发的时候,免不了要调用Java:Unity可以通过两种方式来调用Android:一是调用jar.二是调用aar. 这篇文章主要讲解怎么从无到有的生成一个jar包,然后un ...
- C++ 数组遍历的两种方式
C++ 数组遍历的两种方式: #include <iostream> using namespace std; int main() { // 一维数组 ] = {, , , , }; / ...
- Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用
1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...
- Struts2实现ajax的两种方式
基于Struts2框架下实现Ajax有两种方式,第一种是原声的方式,另外一种是struts2自带的一个插件. js部分调用方式是一样的: JS代码: function testAjax() { var ...
- CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)
CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取 ...
随机推荐
- 【LOJ6620】「THUPC 2019」不等式 / inequality(线段树)
点此看题面 大致题意: 给你两个长度为\(n\)的数组\(a_i\)和\(b_i\),定义\(f_k(x)=\sum_{i=1}^k|a_ix+b_i|\),对于\(k=1\sim n\)的每个\(f ...
- x86-64数据格式、通用寄存器与操作数格式
x86-64数据格式.通用寄存器与操作数格式 数据格式 Intel用术语"字(word)"表示16位数据类型,32位为"双字(double words)", ...
- java之逻辑运算符
&-逻辑与 |-逻辑或 !-逻辑非 &&-短路与 ||-短路或 ^-逻辑异或 a b a&b a|b !a a^b a&& ...
- Mybatis和Hibernate框架的区别
Mybatis和Hibernate框架的区别1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据 ...
- IT兄弟连 Java语法教程 流程控制语句 分支结构语句4
4 嵌套if-else条件语句 嵌套if语句是作为另一个if或else语句的目标的if语句.嵌套if语句在程序设计中非常普遍.Java中,关于嵌套if语句需要记住的是,else语句总是和同一代码块中 ...
- 纯js的统计图插件-统计图
第一次写博客,写的不到望大家见谅! 今天给大家分享一个纯js的插件(统计图),有知道的可以在下面评论一起谈论一下,刚学着的时候,我是看了好久才看懂的一个基本结构,到后来我才知道原来直接去原网站上找到复 ...
- 【2019年版】如何向SAP公司提交Message?
[2019年版]如何向SAP公司提交Message? 1,浏览器里输入如下网址: ,出现如下界面, 2,点击 'Visit the SAP Support Portal' 按钮.进入如下界面,去菜单M ...
- react 地图发布 cesium 篇
上篇文章介绍了如何搭建 react cesium 开发环境.在开发环境下,项目一切运行正常.最近把项目打包发布出来,却遇见了 cesium 不能正确初始化.打开浏览器的调试面板,出现好多 404,资源 ...
- Android Studio compile error ---- enum constant INSTANT_RUN_REPLACEMENT does not
原文:http://stackoverflow.com/questions/34868876/android-studio-compile-error-enum-constant-instant-ru ...
- EGit(Git Eclipse Plugin)使用
https://shihlei.iteye.com/blog/2124411 前言: 1)Git于SVN的不同 Git是分布式数据库,本地创建仓库,即可在本地完成版本控制(等价于SVN在本地 ...