求两个数的最大公因子,使用“辗转相除法”。
原理如下:若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);
- }
转载于:https://blog.51cto.com/lynsa/885105