三种方式求最大公约数

1.更相减损法

2.辗转相除法

3.遍历

#include 

void swapint(int*n, int*m)
{
	int temp = 0;
	temp = *n;
	*n=*m;
	*m=temp;
}

int getgcd1(int m, int n)
{
	int i = 0;
	while( m%2 == 0 && n%2 == 0)
	{
		++i;
		m = m/2;
		n = n/2;
	}

	if( m < n )
	{
		swapint(&n,&m);
	}

	while( n != m-n)
	{
		m = m - n;
		if( m < n )
		{
			swapint(&n,&m);
		}
	}

	while(i--)
	{
		n = n<<1;
	}
	return n;
}

int getgcd2(int m, int n)
{

	int r = 0;

	while( m != 0 )
	{
		r = n % m ;
		n=m;
		m=r;
	}

	return n ;
}

int getgcd3(int m, int n)
{
	int i = 2;
	int x = 1;
	if( m < n)
	{
		swapint(&n,&m);
	}

	i = n ;
	for(; i>2;--i)
	{
		if( n%i==0 && m%i==0)
		{
			x = i;
			break;
		}
	}

	return x ;

}


int main()
{
	int i = 99 ;
	int j = 88 ;
	printf("1.   %d\n", getgcd1(i,j));
	printf("2.   %d\n", getgcd2(i,j));
	printf("3.   %d\n", getgcd3(i,j));


	printf("最小公倍数:%d\n",(i*j)/getgcd1(i,j));

	return 0;
}


你可能感兴趣的:(C语言,算法)