hzCPPOJ

运用辗转相除法求最大公约数

时间限制:  1 s      内存限制:   128 MB
提交:455     正确:362     分值:55

题目描述

求两个正整数m和n的最大公约数。


最大公因数:greatest common divisor

最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),求最大公约数有多种方法,常见的有质因数分解法、短除法辗转相除法更相减损法。与最大公约数相对应的概念是最小公倍数,a,b的最小公倍数记为[a,b]。

质因数分解法:把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是这几个数的最大公约数

短除法:短除法求最大公约数,先用这几个数的公约数连续去除,一直除到所有的商互质为止,然后把所有的除数连乘起来,所得的积就是这几个数的最大公约数。

辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法

假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 ÷ 615 = 3 (余 152)
615 ÷ 152 = 4(余7)
152 ÷ 7 = 21(余5)
7 ÷ 5 = 1 (余2)
5 ÷ 2 = 2 (余1)
2 ÷ 1 = 2 (余0)
至此,最大公约数为1
在求解最大公约数的几种方法中,辗转相除法最为出名。辗转相除法是仍然在使用的历史最悠久的算法之一。它首次出现于几何原本(卷7命题1–2、卷10命题2–3)(大约公元前300年)。在卷7中用于整数,在卷10中用于线段的长度(也就是所说的实数,但是当时未有实数的概念)。卷10中出现的算法是几何的,两段线段ab的最大公约数是准确测量ab的最大长度。


输入

输入两个正整数m和n。


输出

输出一个正整数,值为m和n的最大公约数。


样例

样例输入:
16 24
样例输出:
8
样例输入:
24 18
样例输出:
6
样例输入:
1997 615
样例输出:
1

提示

【分析】求两个正整数的最大公约数采用的辗转相除法求解。
以下是辗转的算法: 分别用m,n,r表示被除数、除数、余数。
①求m/n的余数r.
②若r=0,则n为最大公约数.若r≠0,执行第③步.
③将n的值放在m中,将r的值放在n中.
④返回重新执行第①步。

提交人

AmberXie

来源/分类