【编程之美】求最大公约数

原创 2015年11月21日 11:27:00

//解法一:更相减损法

BigInt(BigInt x,BigInt y){
	if(x < y){
		return gcd(y,x);
	}
	if(y==0) return x;
	else return gcd(x-y,y);//gcd(y-x,y)
}

//解法二:辗转相除法

int gcd(int x, int y){
	return !b ? a:gcd(b,a%b);
}

//解法三:解法一和解法二的集合

BigInt gcd(BigInt x,BigInt y){
	if(x < y) return gcd(y,x);
	if(y==0) return x;
	else{
		if(IsEven(x)){
			if(IsEven(y))	return 2*gcd(x>>1,y>>1);
			else return gcd(x>>1,y);
		}
		else{
			if(IsEven(y)) return gcd(x,y>>1);
			else return gcd(y,x-y);
		}
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

编程之美--求最大公约数

import java.math.BigInteger; public class Gcd { public static int gcd(int a,int b){ return b...

《编程之美》求两个大整数的最大公约数问题的一般解法

#include #include #define MAX 100 #define c 1       /*这是控制程序调试用的代码,当c=0时可以注释代码*/ #if c char *big2S...

每天一道编程题----------------辗转相除法求两个数的最大公约数及其证明

证明方法为转载:        设两数为a、b(a>b),b最大公约数(a,b)的步骤如下:用b除a,得a=bq......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用r1除b...

[编程之美] PSet2.7 最大公约数问题

 问题描述: 求两个正整数的最大公约数Greatest Common Divisor (GCD)。如果两个正整数都很大,有什么简单的算法吗? 例如,给定两个数1 100 100 210 00...

编程之美_007最大公约数问题

// 最大公约数问题 public class Test { public static void main(String[] args) { System.out....
  • adam_zs
  • adam_zs
  • 2013年01月16日 15:44
  • 783

编程之美--最大公约数问题

思路: 最大公约数问题也是一个非常典型的递归算法的应用。每次递归使得原来求两个大数之间的公约数转变成求两个稍微小点的数之间的公约数,要求转换的过程要保证不会改变公约数的值。这就要看其中转换的原理了。...
  • rein07
  • rein07
  • 2011年09月01日 15:56
  • 2001

编程之美之最大公约数

问题:求两个整数的最大约数 方法一:        辗转相除法,对于两个整数x和y,用f(x,y)表示两者的最大公约数,则f(x,y)=f(y,x%y)。        例如f(42,30)=f...

《编程之美》---精确表达浮点数子问题---辗转相除法求取最大公约数

辗转相除法 当两个数都较大时,采用辗转相除法比较方便.其方法是: 以小数除大数,如果能整除,那么小数就是所求的最大公约数。否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数。依此类推,直到一...

【牛客网】【网易2016研发工程师编程题】【辗转相除法求最大公约数】

小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3...bn. 如果遇到的怪物防御力...
  • ALiTuTu
  • ALiTuTu
  • 2016年02月25日 20:39
  • 1184
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【编程之美】求最大公约数
举报原因:
原因补充:

(最多只允许输入30个字)