求最大公因数(辗转相除法&更相减损术)

辗转相除法

又名欧几里得算法 ,其原理其实是基于这个定理:\(gcd(a,b)=gcd(b,a\%b)\),详细证明,而任何数与0的最大公约数是它本身 (递归终止条件),所以可以如下递归求出两数最大公因数:

\[f(a,b)=\left\{
\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的最大公约数,同理,所以可以如下递归求出两数最大公因数:

\[f(a,b)=\left\{
\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的博客

求最大公因数(辗转相除法&更相减损术)的更多相关文章

  1. C语言,最大公约数---更相减损术

    // 最大公约数 更相减损法 int commonDivisor() { int i,k,n=0; printf("请输入两个不同的正整数,用,隔开\n"); scanf(&quo ...

  2. C语言复习---获取最大公约数(辗转相除法和更相减损法)

    源自:百度百科 辗转相除法 辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法. 例如,求(,): ∵ ÷=(余319) ∴(,)=(,): ∵ ÷=(余58) ∴(,)=( ...

  3. bzoj 1876 [SDOI2009]SuperGCD(高精度+更相减损)

    1876: [SDOI2009]SuperGCD Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2384  Solved: 806[Submit][Sta ...

  4. BZOJ 1876: [SDOI2009]SuperGCD( 更相减损 + 高精度 )

    更相减损,要用高精度.... --------------------------------------------------------------- #include<cstdio> ...

  5. My97DaePicker 用js实现文本框日期相减求天数

    <tr>                <td align="center" style="background-color: #cccccc;font ...

  6. oracle 日期相减

    oracle日期相减2012-02-10 12:18--MONTHS_BETWEEN(date2,date1) 给出date2-date1的月份 SQL> select months_betwe ...

  7. oracle 日期相减 转载

      转自 http://hi.baidu.com/juanjuan_66/blog/item/cf48554c9331fbe6d62afc6a.html oracle日期相减2012-02-10 12 ...

  8. C#-和时间有关的计算代码、时间相减 得到天数、小时、分钟、秒差

    asp.net(C#)时间相减 得到天数.小时.分钟.秒差   asp.net(C#)时间相减 得到天数.小时.分钟.秒差   DateTime dtone = Convert.ToDateTime( ...

  9. asp.net(C#)时间相减 得到天数、小时、分钟、秒差

    asp.net(C#)时间相减 得到天数.小时.分钟.秒差 DateTime dtone = Convert.ToDateTime("2007-1-1 05:00:00"); Da ...

随机推荐

  1. python爬虫之Scrapy 使用代理配置——乾颐堂

    在爬取网站内容的时候,最常遇到的问题是:网站对IP有限制,会有防抓取功能,最好的办法就是IP轮换抓取(加代理) 下面来说一下Scrapy如何配置代理,进行抓取 1.在Scrapy工程下新建“middl ...

  2. [Schema] I have updated my XML Schema for my service but SoapUI still generates/validates according to the old schema.

    SoapUI caches XML schemas when they are first loaded. If you need to force a reload of an interfaces ...

  3. MongoDB与CouchDB全方位对比(转)

    出处:http://www.csdn.net/article/2011-03-21/294226 本文见于MongoDB官方网站,MongoDB与CouchDB很相似,他们都是文档型存储,数据存储格式 ...

  4. cenots7单机安装Kubernetes

    关于什么是Kubernetes请看另一篇内容:http://www.cnblogs.com/boshen-hzb/p/6482734.html 一.环境搭建 master安装的组件有: docker ...

  5. YII2 rule exist unique

    ['mobile', 'exist', 'targetClass' => 'xmobile\modules\v1\models\BuyerList', 'message' => '当前用户 ...

  6. java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoader

    一直报这个错误 错误原因jar包没有导入到.classes文件下,需要导入到此文件下,因为用的是user library,所以只有逻辑导入,没有实际导入,切换下就好了,具体看如下文章 http://w ...

  7. java Jvm工作原理学习笔记

    一.         JVM的生命周期 1.       JVM实例对应了一个独立运行的java程序它是进程级别 a)     启动.启动一个Java程序时,一个JVM实例就产生了,任何一个拥有pub ...

  8. Linux学习系列——零基础开始

    第一部分 Linux基础命令 1.查看系统信息命令 2.Linux内核版本 3.修改环境变量

  9. OpenCV4Android安装

    转:http://blog.csdn.net/gao_chun/article/details/49359535 1.下载及目录介绍 2.将 OpenCV引入 Android Studio 3.更新 ...

  10. 自定义DropDownMenu菜单

    在JayFang1993 / DropDownMenu的基础上进行修改,最后的到自己想要的效果 本来的效果: 而我最后实现的效果是: 我们先来分析一下DropDownMenu的源代码 需要改动的地方 ...