您的位置:首页 > 其它

辗转相除法gcd(a,b)

2016-03-12 23:35 190 查看
辗转相除法的基本原理是:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 =
21 × 5);因为252 − 105 = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。

1)假设a是b和c的最大公约数,即b=k1*a,c=k2*a,那么|b-c|=|k1-k2|*a,可知a仍然是两数的差的公约数,由此可推得a是|b-c|和较小数的最大公约数。

2)设a>b且r=a-b;若r>b,根据1)则最大公约数为r-b与b的最大公约数,继续下去直到r'-b<b即r'=a mod b与b的最大公约数.再求r''=b mod r'.当最后求得的两约数相等即r'' mod r' =0时r'即为最大公约数。

C++:

int main(){

int a=0,b=0;

int temp=0;

cin >>a >>b;

if(a<b){

temp=a;

a=b;

b=temp;

}

while(c){

temp=a%b;

a=b;

b=temp;

}

cout<<a;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: