1. 程式人生 > >詳解輾轉相除法求最大公約數,及原理

詳解輾轉相除法求最大公約數,及原理

還是老規矩直接講解原理
輾轉相除法 優點是可以求出兩個大數的最大公因數

如果我們要求8251與6105的最大公因數的話
假設8251是這個數x的a倍,再假設6105是x的b倍
那麼2146=8251-6105,是x的(a-b)倍,也是x的倍數
而無論這幾個數如何加減,甚至相乘,都還是最大公約數的倍數
我們就可以把求8251與6105的最大公約數簡化成求2146和6105的最大公約數,再把求2146與6105的最大公約數簡化為求3959(=6105-2146)與2146的最大公約數
如此相減往復幾次後,會發現兩個數變相等了,這個數就是兩個原來數的最大公因數
舉個例子
9和6
9-6=3,保留6,3
6-3=3,保留3,3
發現兩數相等,為3
所以最大公因數為3
#include <stdio.h>
int gcd(int a, int b)
{
	if(b==0)
	return a;
	else
	return gcd(b,a%b);//return b?gcd(b,a-b):a;
}
int main()
{
	int a, b;
	while(~scanf("%d%d", &a, &b))
	{
		int g = gcd(a,b);
		printf("%d\n", g);
	}
	return 0;
 }