`
kmplayer
  • 浏览: 497733 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

2.7 最大公约数问题

阅读更多
1,方法一:
最经典的辗转相除法.
int gcd(int x, int y)
{
	return (!y)? x:gcd(y, x % y);
}

缺点:取模运算开销较大,容易成为瓶颈.

2,方法二:
int gcd(int x, int y)
{
	if (x < y)
		return gcd(y, x);
	if (y == 0)
		return x;
	else
		return gcd(x-y, y);
}

缺点:免去了取模,迭代次数却增加了不少.

3,方法三:
有效利用x,y的奇偶性.

若x,y均为偶数,则f(x,y) = 2*f(x>>1, y>>1);
若x为偶数,y为奇数,则f(x,y) = f(x>>1, y);
若x为奇数,y为偶数,则f(x,y) = f(x, y>>1);
若x,y均为奇数,则f(x,y) = f(y, x-y);
int gcd(int x, int y)
{
	if (x < y)
		return gcd(y, x);
	if (y == 0)
		return x;
	else
	{
		if (isEven(x))
		{
			if (isEven(y))
				return gcd(x >> 1, y >> 1) << 1;
			else
				return gcd(x >> 1, y);
		}
		else
		{
			if (isEven(y))
				return gcd(x, y >> 1);
			else
				return gcd(y, x - y);
		}
	}
}
分享到:
评论

相关推荐

    计算机考研机试攻略 - 高分篇(试读).pdf

    3.2 最大公约数(GCD) 72 3.3 最小公倍数(LCM) 74 3.4 斐波那契数列 75 3.5 素数判定 76 3.6 素数筛选 78 3.7 分解素因数 81 3.8 二分快速幂 83 3.9 常见数学公式总结 85 3.10 规律神器OEIS 87 第四章 ...

    C语言程序设计代码复习题大全.zip

    1.8 用调用函数求最大公约数和最小公倍数。两个整数由键盘输入 1.9 写出一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息 1.10 用调用函数求水仙花数 1.11 用调用函数将3*3的二维数组行和列互换 1.12 ...

    acm模板(全)

    2.1 最大公约数gcd 21 2.2 最小公倍数lcm 22 2.3 快速幂取模B^LmodP(O(logb)) 22 2.4 Fermat小定理 22 2.5 Rabin-Miller伪素数测试 22 2.6 Pollard-rho 22 2.7 扩展欧几里德算法extended-gcd 24 2.8 欧拉定理 24 2.9...

    ACM模板(几乎全)

    2.1 最大公约数gcd 21 2.2 最小公倍数lcm 22 2.3 快速幂取模B^LmodP(O(logb)) 22 2.4 Fermat小定理 22 2.5 Rabin-Miller伪素数测试 22 2.6 Pollard-rho 22 2.7 扩展欧几里德算法extended-gcd 24 2.8 欧拉定理 24 2.9...

    《数据结构Java版》习题解答..doc

    3 【习1.2】 实验1.3 用递归算法求两个整数的最大公因数。 3 第2章 线性表 5 【习2.1】 习2-5 图2.19的数据结构声明。 5 【习2.2】 习2-6 如果在遍历单链表时,将p=p.next语句写成p.next=p,结果会怎样? 5 【习2.3...

    《妙趣横生的算法(C语言实现)》(杨峰 编著)

    5.2 求两个数的最大公约数和最小公倍数 5.3 歌德巴赫猜想的近似证明 5.4 三色球问题 5.5 百钱买百鸡问题 5.6 判断回文数字 5.7 填数字游戏求解 5.8 新郎和新娘 5.9 爱因斯坦的阶梯问题 5.10 寻找水仙花数 5.11 猴子...

    C/C++常用算法手册.秦姣华(有详细书签).rar

    9.6.1 计算最大公约数算法——搌转相除法 287 9.6.2 计算最大公约数算法一一Stein算法 288 9.6.3 计算最大公约数示例 289 9.7 最小公倍数 290 9.8 素数 292 9.8.1 素数概述 292 9.8.2 计算素数算法 292 9.9 ...

    leetcode530-leetcode-practise:用python学习leetcode

    leetcode 530 leetcode-练习 用python学习leetcode 分而治之 95, 96, 241, 91, 247 评论:241, 95, 91, ...最大公约数, 最小公倍数, 编程之美2.7, leetcode 504, 405, 168, 172, 编程之美2.2, 67, 41

    java自学之道

    2.7 求最大公约数与最小公倍数 2.8 完全平方数 2.9 统计字母、空格、数字和其它字符个数 2.10 求主对角线之和 2.11 完数求解 2.12 求s=a+aa+aaa+aaaa+aa...a的值 2.13 高度计算 2.14 乘法口诀 2.15 无重复三位数 ...

    数据结构(Java版)(第2版)习题解答

    【习1.2】 实验1.3 用递归算法求两个整数的最大公因数。 3 第2章 线性表 5 【习2.1】 习2-5 图2.19的数据结构声明。 5 【习2.2】 习2-6 如果在遍历单链表时,将p=p.next语句写成p.next=p,结果会怎样? 5 【习2.3】 ...

    c程序设计习题参考(谭浩强三版)习题参考解答

    8.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。 47 8.2 47 8.3写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。 49 8.4写一...

    Java开发技术大全 电子版

    2.7.2求最大公约数和最小公倍数89 2.7.3Fibonacci数列90 2.7.4逆向输出数字91 2.7.5求水仙花数92 2.7.6输出图形93 2.7.7输出九九口诀表94 2.8本章小结95 第2篇Java面向对象编程 第3章对象和类98 3.1面向...

Global site tag (gtag.js) - Google Analytics