欧几里德算法
定义
欧几里德算法又称辗转相除法,主要用于计算两个正整数的最大公约数,具体操作步骤如下:
设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得a÷b=qr(0≤r1)。若r=0,则(a,b)=b;若r≠0,则再用b除以r,得b÷r=qr(0≤r).若r=0,则(a,b)=r,若r≠0,则继续用r除以r,如此下去,直到能整除为止。其最后一个为被除数的余数的除数即为(a, b)。
代码
int GCD(int a,int b)
{
return b==0?a:GCD(b,a%b);
}
练习题目
http://acm.nyist.net/JudgeOnline/problem.php?pid=40
http://acm.nyist.net/JudgeOnline/problem.php?pid=556
高精度gcd算法
(1)如果a,b都是偶数,那么gcd(a,b)=gcd(a/2,b/2)*2
(2)如果a是偶数,b是奇数,那么gcd(a,b)=gcd(a/2,b)
(3)如果a,b都是奇数,那么gcd(a,b)=gcd((a-b)/2,b)
时间复杂度为o(log(max(a,b)))