最大公约数算法

看到一个比较精炼的最大公约数算法:

public static int gcd(int a, int b){
    return b==0 ? a : gcd(b, a % b);
}

  

时间: 2024-12-20 06:48:31

最大公约数算法的相关文章

二进制最大公约数算法

求最大公约数的Euclid算法需要用到大量的取模运算,这在大多数计算机上是一项复杂的工作,相比之下减法运算.测试数的奇偶性.折半运算的执行速度都要更快些. 二进制最大公约数算法避免了Euclid算法的取余数过程. 二进制最大公约数基于下述事实: 若a.b都是偶数,则gcd(a,b)=2*gcd(a/2,b/2) 若a是奇数.b是偶数,则gcd(a,b)=gcd(a/2,b/2) 若a.b都是奇数,则gcd(a,b)=gcd((a-b)/2,b) 因此可写出二进制最大公约数算法如下(C语言版):

菜鸟学算法--简单的交换和最大公约数算法入门篇

工作之后我们大部分的时间实在研究如何如何学习一门语言 如何如何掌握一门技术,但是作为编程的本质 数据结构和算法 我们慢慢的忽略了 . 工作后的很多程序员真的没有大学生一样的时间 去静下心来去增加自己的底蕴,这是我深有体会的事情当然我这里指的是和我有累死感觉的人. 学习是一个过程,从简入繁 一贯如此,记录下来只为 记录自己的点点滴滴. 算法的本质并不是我们程序员去创造算法 而是我们 按照先人创造的算法思想 用代码来实现算法. 下面开始介绍两个 简单的例子 一个是交换 一个是最大公约数算法. 简单的

公约数算法

/* 对于已知的两个自然数m, n,假设m>n 计算m除以n,将得到的余数记做r 如果r=0,则此时的n为求得的最大公约数.否则,将n的值保存在m中,将r的值保存在n中, 重复执行下去. */ //欧几里得->辗转相除法 #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <iostream> #include &l

《转》两种最大公约数算法

1.辗转相除法 辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法.例如,求gcd(319,377):∵ 377÷319=1(余58)∴gcd(377,319)=gcd(319,58):∵ 319÷58=5(余29),∴ gcd(319,58)=gcd(58,29):∵ 58÷29=2(余0),∴ gcd(58,29)= 29:∴ gcd(319,377)=29. 2. 更相减损法: 更相减损术,是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需

Summary: gcd最大公约数算法

欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数.其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 假设d 是(b,a mod b)的公约数,则 d | b , d |r ,但是a = kb +r 因此d也是(a,b)的公约数 因此(a,b

【170723】一个简洁的求最大公约数算法

1 import java.util.Scanner; 2 3 public class ZuiDaGongYueShuClass { 4 5 public static void main(String[] args) { 6 Scanner in = new Scanner(System.in); 7 int a = in.nextInt(); 8 int b = in.nextInt(); 9 while (b != 0) { 10 int r = a % b; 11 a = b; 12

php取两个整数的最大公约数算法大全

php计算两个整数的最大公约数常用算法 <?php//计时,返回秒function microtime_float (){ list( $usec , $sec ) = explode ( " " , microtime ()); return ((float) $usec + (float) $sec );}////////////////////////////////////////////欧几里得算法function ojld($m, $n) { if($m ==0 &a

欧几里得最大公约数算法

最大公约数 想必大家小学就学过什么事最大公约数吧,现在给出一个数学上的定义:定义$g$是整数$a$和$b$的最大公约数,当且仅当$g$是同时整除$a$和$b$的数中最大的那个. 欧几里得算法 欧几里得算法可以写成如下简单的形式: $$gcd(a,b) =\begin{cases} a, & \mbox{if }b=0 \\gcd(b,a\ mod\ b), & \mbox{if }b\ne0\end{cases}$$ 算法的证明 算法的过程可以写成如下的形式: $$a=q_0b+r_0$$

欧几里德算法(最大公约数算法)完整分析

欧几里德算法又称为辗转相除法,用于计算两个非负整数的最大公因数.其伪代码如下: gcd(a, b) //要求保证传入的a>=b if(b == 0) return a return gcd(b, a % b) 首先说明这个函数能返回a与b的最大公因数.但是我们不从代码到原理,我们要从原理返回代码.(下面的出现的所有符号均为非负整数) 在a与b均非0且a>=b的情况下,若c是a和b的最大公因数(c>0),那么就有c|a和c|b的同时成立.显然a=i*c,b=j*c,此处应满足1<=j