最大公约数算法

一、穷举法

        /** 穷举法 */
	public int gcdExhaustion(int firstNumber, int secondNumber) {
		int n1 = Math.abs(firstNumber);
		int n2 = Math.abs(secondNumber);
		int gcd = 1;
		
		for (int i = 1; i <= n1 && i <= n2; i++) {
			if (0 == n1 % i && 0 == n2 % i)
				gcd = i;
		}
		return gcd;
	}

二、欧几里德算法

定义:假设x%y=r,则x与y的最大公约数等于y与r的最大公约数

        /** 欧几里德算法 (迭代)*/
	public int gcdEuclid(int firstNumber, int secondNumber) {
		int n1 = Math.abs(firstNumber);
		int n2 = Math.abs(secondNumber);
		int r = n1 % n2;

		while(0 != r) {
			n1 = n2;
			n2 = r;
			r = n1 % n2;
		}
		return n2;
	}
	
	/** 欧几里德算法(递归) */
	public int gcdEuclid2(int firstNumber, int secondNumber) {
		int n1 = Math.abs(firstNumber);
		int n2 = Math.abs(secondNumber);
		int r = n1 % n2;
		
		if (0 == r)
			return n2;
		return gcdEuclid2(n2, r);
	}


你可能感兴趣的:(最大公约数算法)