求两个整数a和b的最大公约数
计算最大公约数最常见的办法就是辗转相除法(欧几里德算法)
- int gcd(int a,int b)
- {
- int temp;
- while(b>0)
- {
- temp=a%b;
- a=b;
- b=temp;
- }
- return a;
- }
另一种方法:
- int gcd(int a,int b)
- {
- if(a<b)
- {
- return gcd(b,a);
- }
- if(b==0)
- {
- return a;
- }
- if(a&1)
- {
- if(b&1)
- {
- return gcd(b,a-b);
- }
- else
- return gcd(a,b>>1);
- }
- else
- {
- if(b&1)
- {
- return gcd(a>>1,b);
- }
- else
- {
- return gcd(a>>1,b>>1)<<1;
- }
- }
- }
好难懂,没看明白是什么原理:-(