求兩個數的最大公因子,使用“輾轉相除法”。
原理如下:若r=a%b,則gcd(a,b)=gcd(b,r)。
簡單推導:
因爲r=a%b,所以a=bq+r,r=a-bq。
a=bq+r,能被b,r整除的,則一定能被a整除,自然也能被a,b整除
r=a-bq,能被a,b整除的,則一定可以被r整除,自然也能被b,r整除
顯然gcd(a,b)=gcd(b,r)。
代碼很簡單:
- int gcd(int a,int b)
- {
- int m=a,n=b;
- if (a < b)
- {
- m=b;
- n=a;
- }
- if(m%n==0)
- return b;
- else
- return gcd(n,r);
- }