求最大公因数(辗转相除法&更相减损术)
求最大公因数(辗转相除法&更相减损术)
辗转相除法
又名欧几里得算法 ,其原理其实是基于这个定理:\(gcd(a,b)=gcd(b,a\%b)\),详细证明,而任何数与0的最大公约数是它本身 (递归终止条件),所以可以如下递归求出两数最大公因数:
\begin{array}{lll}
b \qquad a\%b=0\\
f(b,a\%b)
\end{array}
\right.
\]
递归实现(C++):
int f(int a, int b){
return (b==0)?(a):f(b,a%b);
}
无需判断a,b的大小关系
更相减损术
出自《九章算术》,其依据原理:两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数,同理,所以可以如下递归求出两数最大公因数:
\begin{array}{lll}
a \qquad a=b\\
f(b,a-b)
\end{array}
\right.
\]
递归实现(C++):
#include <iostream>
#include <algorithm>
using namespace std;
int f(int a, int b){//a>b
int r=a-b;
if(r==0) return b;
if(r>b) return f(r,b);
else return f(b,r);
}
int main(){
int a,b;
cin>>a>>b;
if(a<b)
swap(a,b);
cout<<f(a,b);
return 0;
}
本文采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处: 转载自:Santiego的博客
求最大公因数(辗转相除法&更相减损术)的更多相关文章
- C语言,最大公约数---更相减损术
// 最大公约数 更相减损法 int commonDivisor() { int i,k,n=0; printf("请输入两个不同的正整数,用,隔开\n"); scanf(&quo ...
- C语言复习---获取最大公约数(辗转相除法和更相减损法)
源自:百度百科 辗转相除法 辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法. 例如,求(,): ∵ ÷=(余319) ∴(,)=(,): ∵ ÷=(余58) ∴(,)=( ...
- bzoj 1876 [SDOI2009]SuperGCD(高精度+更相减损)
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2384 Solved: 806[Submit][Sta ...
- BZOJ 1876: [SDOI2009]SuperGCD( 更相减损 + 高精度 )
更相减损,要用高精度.... --------------------------------------------------------------- #include<cstdio> ...
- My97DaePicker 用js实现文本框日期相减求天数
<tr> <td align="center" style="background-color: #cccccc;font ...
- oracle 日期相减
oracle日期相减2012-02-10 12:18--MONTHS_BETWEEN(date2,date1) 给出date2-date1的月份 SQL> select months_betwe ...
- oracle 日期相减 转载
转自 http://hi.baidu.com/juanjuan_66/blog/item/cf48554c9331fbe6d62afc6a.html oracle日期相减2012-02-10 12 ...
- C#-和时间有关的计算代码、时间相减 得到天数、小时、分钟、秒差
asp.net(C#)时间相减 得到天数.小时.分钟.秒差 asp.net(C#)时间相减 得到天数.小时.分钟.秒差 DateTime dtone = Convert.ToDateTime( ...
- asp.net(C#)时间相减 得到天数、小时、分钟、秒差
asp.net(C#)时间相减 得到天数.小时.分钟.秒差 DateTime dtone = Convert.ToDateTime("2007-1-1 05:00:00"); Da ...
随机推荐
- fitting 方法的异常值过滤
training = pd.DataFrame({'x':[3,6,9,15,300, 20,85]}). 原始数据training_fitting = pd.DataFrame({'x':[4,7 ...
- 基于CacheManager组件的缓存产品配置
一.Couchbase 使用CacheManager组件,在配置Couchbase缓存支持时,由于对配置节cache handle命名规则要求不了解,费了点时间查了源码才明白. section配置节 ...
- myisam,innodb和memory的区别
1.myisam,innodb和memory的区别如下: 2:InnoDB存储引擎2.1:InnoDB具有事务,回滚,崩溃修复能力和多版本并发的事务安全2.2:关于InnoDB的auto_increm ...
- Git: 教你如何在Commit时有话可说
Git: 教你如何在Commit时有话可说 不知道大家有没有观察过那些在Github上Star数位居前列的项目,它们无一例外的都拥有完善的文档体系和高覆盖的测试用例.要做到完善没有规范肯定是不行的 ...
- 谷歌浏览器插件开发入门-官方版Helloworld详解
目录: 需求 原理 实现步骤: 一个空的插件 一个可以设置一种背景色的插件(可以设置百度首页的背景色为绿色) 一个可以设置多种背景色的插件 需求: 插件可以改变特定网址的背景颜色. 原理: 将各种ht ...
- Label下FormattedText中的Span无法使用Binding的解决方法
在Xamarin.Forms中,Xaml的模板功能并没有原生WPF丰富,比如Label中虽然有FormattedText可以添加Span来丰富Label的功能,但是下面的Span中的Text并没有绑定 ...
- SqlServer:CTE函数处理递归(WITH语法)
原文地址:http://www.cnblogs.com/xbf321/archive/2009/04/30/1446833.html 我们在做分类处理的时候,总会遇到递归的处理,比如说地区就是一个例子 ...
- 数独高阶技巧入门之六——ALS
在这个系列的第一篇(链及其简单应用)以及第四篇(简单异数链)中已经简单介绍过ALS结构的定义,即n格中存在n+1个不同的候选数 (双值格可视为特殊的ALS结构) .根据数独规则,在组成ALS的候选数 ...
- .Net Core内存回收模式及性能测试对比
.NET Core 两种GC模式: Server GC / Workstation GC Server GC : 主要应用于多处理器系统,并且作为ASP.NET Core宿主的默认配置.它会为每个处理 ...
- sql分组拼接字段
--联查select n.*,t.Name from News n join Type_News tn on n.Id=tn.NId join Types t on t.Id=tn.TId --拼接并 ...