求最大公约数
1.辗转相除法(欧几里得法)
算法:
前提:设两数为a,b设a为被除数,b为除数,temp为余数,大数放在a中,小数放在b中;
①求a/b的余数temp;
②若temp=0则b为最大公约数;
③如果temp!=0则把b的值给a,temp的值给b;
④返回第二步;
int gcd(int a,int b) { return (a%b==0)?b:gcd(b,a%b); }
2.更相减损术
其原理很简单:两个正整数a和b(a > b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。依次递归下去,直到两个数相等。这相等两个数的值就是所求最大公约数。
int gcd(int a,int b) { if(a==b ) return a; else if(a>b) return gcd(a-b,b); else if(a<b) return gcd(b-a,a); }
浙公网安备 33010602011771号