求最大公约数

gcd()方法中使用的辗转取余数法 f(v1,v2) = f(v2, v1 % v2)。
gcd1()也是辗转取余数法,不过用的递归实现的。
gcd2()使用的是相减法,f(v1,v2) = f(v1-v2,v2)。
这两个方法都要缺陷,如果是大整数的数的话,方法gcd()取余数操作会耗时,gcd2()方法如果两个数相差很大,会多次递归。
#include<iostream>
#include<vector>
using namespace std;

int gcd(int v1,int v2)
{
	while(v2)
	{
		int temp = v2;
		v2 = v1 % v2;
		v1 = temp;
	}
	return v1;
}

int gcd1(int v1,int v2)
{
	return (!v2) ? v1 : gcd1(v2,v1 % v2);
}

int gcd2(int v1,int v2)
{
	if(v1 < v2)
		swap(v1,v2);
	return (!v2) ? v1 :gcd2(v1 - v2,v2);
}

int main(void)
{
	cout<<gcd(999999,285714)<<endl;
	cout<<gcd1(999999,285714)<<endl;
	cout<<gcd2(999999,285714)<<endl;
	system("pause");
	return 0;
}

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