这几天闲的没事,研究一下欧几里得算法,上大学的时候学了这算法但是当时压根不明白到底怎么实现的。今天心血来潮,就把它整明白了。
首先:记gcd(a,b)为两个整数a和b的最大公约数。然后有如下性质:
1:gcd(a,b)=gcd(b,a) //意思就是a和b,b和a的公约数相等
2:gcd(a,b)=gcd(-a,b) // a和b, b-a的公约数相同,因为a与b都有最大公约数,那么a-b必然也有相同的公约数。如a=nj, b=mj; 设(a>b), a-b=(n-m)j.
3:gcd(a,0)=|a| // 这样一来,每次的被除数一定是最大公约数的倍数,那除到最后,除数为0时,被除数不就是最大公约数嘛。就是这么个道理,
4:gcd(a,0)=gcd(b,a%b), 0 <= a%b < b