导读

求最大公约数,最简单粗暴方法是列出他们的约数,去找共同的那些,选最大的就行了。。。
当然,还有其他的,就是欧几里得算法,或者叫做辗转相除法,也可以来求最大公约数,但是这个的前提条件是2个正整数。
所以这篇写的是辗转相除法的代码实现及非常简单的一些证明了。

题目

思路:

就是证明辗转相除法为什么是对的。。。
首先用文字描述一下辗转相除法的内容:
有2个正整数a,b。 他们的最大公约数,
也是 a,b当中较小的一个和 他们相除之后的余数 的最大公约数。
下面就简单的证明一下:

维基百科里面对于欧几里得算法有动图的展示说明,看了理解会更深刻一些,这里不好抓动图(说着说懒的弄),就不放了。
有兴趣的上维基百科瞅瞅。

代码:

	// gcd: greatest common divisor : 最大公约数
	// 题目已经说明 参数为2个正整数,不判断参数为负数的情况了。。(为了凑成1行。。.)
	public static int gcd(int a, int b) {
   
		return b == 0 ? a : gcd(b, a % b); 
	}

检验正确性:(就是找了几个测试用例来验证。。。)

	public static void main(String[] args) {
   
		System.out.println("0 和 0 的最大公约数: " + gcd(0, 0));
		System.out.println("0 和 1 的最大公约数: " + gcd(0, 1));
		System.out.println("999 和 999 的最大公约数: " + gcd(999, 999));
		System.out.println("2 和 998 的最大公约数: " + gcd(2, 998));
		System.out.println("1997 和 615 的最大公约数: " + gcd(1997, 615));
		System.out.println("618 和 240 的最大公约数: " + gcd(618, 240));
	}

运行结果:

这个有0个0只是想看下 除0错误的 结果是怎么样的。。。可以忽略。
对于测试用例的选取:
学过软件测试里学的设计测试用例的方法,但是这里就没有想那么多了