论求最大公约数的方法

求最大公约数实际上是一个非常简单的问题,但是在ACM中如何将效率搞的最高也需要一点点技巧。下面将今天收集到的一点资料粘贴在此处。

书上是说: 1.输入m、n(m为被除数,n为除数)2.m/n得余数r。3.判断r=0?是的话n为最大公约数。4.否则将n赋给m,r赋给n,循环2.
辗转相除法:如: 求(45, 72)

72/45 = 1  余 27 不等于0,再除45 /27= 1  余 18 不等于0,再除27/18=  1  余  9  不等于0,再除18/9 =   2  余  0  等于0,结束。

所以 (45, 72)=9

int gcd(long a,long b){

long r;
r = a%b;//这里是可以不管两者的相对大小的,因为后面两个数还是要互换
while(r!=0){
a=b;
b=r;
r =a%b;
}
return b;
}//这个就是欧几里德的算法

//就是计算有余数时就选择将除数赋值给被除数,将余数赋值给除数,然后循环,直到最后余数为0时停止当然,当你求得最大公约数时就相当于求得了最小公倍数,因为最小公倍数=M*N/最大公约数

例题:杭电2503

论求最大公约数的方法

时间: 2024-10-10 07:40:19

论求最大公约数的方法的相关文章

记一种求最大公约数的方法

除了短除,还有下面两种方法求最大公约数,不但在数学中显得简单,而且在编程中有很好的效果 尤其是特别适合于编程... 先放文字说明: 1.更相减损法 第一步:任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若不是则执行第二步. 第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数.继续这个操作,直到所得的减数和差相等为止. 则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数. 其中所说的“等数”,就是最大公约数.求“等数”的办法是“更相减损”法.所以

求最大公约数和最小公倍数

学习C++入门级的题目,求最大公约数和最小公倍数,这里介绍两种求最大公约数的方法,即辗转相除法和辗转相减法.辗转相除法的原理自行百度,辗转相减法的原理就是只要两数不想等就用大数减小数,直至相等,求最小公倍数的方法就是用两数的乘积除以最大公约数. #include<iostream> using namespace std; int maxf(int a,int b)//辗转相减法 { while(a != b) { if(a > b) return a = a - b; else ret

java求最大公约数(分解质因数)

下面是四种用java语言编程实现的求最大公约数的方法: package gcd; import java.util.ArrayList; import java.util.List; public class gcd { public static void main(String[] args) { long startTime; long endTime; long durationTime; int[] testArray1 = new int[]{784, 988, 460, 732,

各种求最大公约数的函数

GCD 求最大公约数函数 方法总结 递归版 int gcd(int x, int y) { if(y==0) return x; return gcd(y, x%y); } 简介递归版 int gcd(int x, int y) { return y>0? gcd(y, x%y) : x; } 非递归版 int gcd(int x, int y) { int tmp; while(y>0) { tmp=x%y; x=y; y=tmp; } return x; } \(algorithm.h\)

求最大公约数的三种方法

一.最大公约数与最小公倍数 最大公约数,属于数论所探究的内容. 最大公约数可以通过下面的三种方法求出来. 最小公倍数呢,它与最大公约数的乘机为所求数之积. 比如求  x,y的最大公约数和最小公倍数 记住这个公式: x*y=最小公倍数*最大公约数 二.求最大公约数的三种方法 ①辗转相除法 算法流程图 int measure(int x, int y) { int z = y; while(x%y!=0) { z = x%y; x = y; y = z; } return z; } 运行结果: ②辗

求两个数的最大公约数的方法

对于两个整数x,y,求其最大公约数(语言:C,C++) 原理:辗转除法求最大公约数:就是不断的用除数去除以余数,直到余数为0 ,最终得到的除数就是该两个数的最大公约数 1.递归法: int gcd(int x,int y) { int result; if(y==0) result=x; else result=gcd(y,x%y); return result; } 2.非递归法(辗转相除法) int gcd(int x,int y) {//辗转除法求最大公约数:就是不断的用除数去除以余数,直

最简单的求最大公约数和最小公倍数的方法

public class Main{  /**   * @param args   */  public static void main(String[] args) {   // TODO Auto-generated method stub   Scanner scan = new Scanner(System.in);   int n,m;   while(scan.hasNext()){    n = scan.nextInt();    m = scan.nextInt();    

用python实现欧几里德算法求最大公约数

方法1: def gcd(x, y):   while n:       x, y = y, x % y   return x 方法2: def yue(x,y):      if y:              return gcd(y,x%y)      else:            return x 用python实现欧几里德算法求最大公约数,布布扣,bubuko.com

辗转相除法求最大公约数

辗转相除法求最大公约数 设两数为a.b(b<a),求它们最大公约数(a,b)的步骤如下:用b除a,得a=bq......r1(0≤r).若r1=0,则(a,b)=b:若r1≠0,则再用r1除b,得b=r1q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1,……如此下去,直到能整除为止.其最后一个非零余数即为(a,b). 从某处找的证明: 原理及其详细证明 在介绍这个方法之前,先说明整除性的一些特点(下文的所有数都是正整数,不再重覆),我们可以这样给出