辗转相除法求最大公约数
2022-05-17 17:10 钟铧若岩 阅读(389) 评论(0) 编辑 收藏 举报假设有两个数x和y,存在一个最大公约数z=(x,y),即x和y都有公因数z,
那么x一定能被z整除,y也一定能被z整除,所以x和y的线性组合mx±ny也一定能被z整除。(m和n可取任意整数)
对于辗转相除法来说,思路就是:
若x>y,设x/y=n余c,
则x能表示成x=ny+c的形式,
将ny移到左边就是x-ny=c,由于一般形式的mx±ny能被z整除,
所以等号左边的x-ny(作为mx±ny的一个特例)就能被z整除,
即x除y的余数c也能被z整除。
————————————————
版权声明:本文为CSDN博主「hello_woo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hello_woo/article/details/79293235
. 辗转相除法是求最大公约数的一种方法。它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。这个和更相减损术有着异曲同工之处。
————————————————
版权声明:本文为CSDN博主「Demo龙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_59708493/article/details/121615282
1 int gcd(int a, int b) 2 { 3 int t; 4 while(1) 5 { 6 t=a%b; 7 if(t==0) 8 { 9 return b;//如果a%b=0;b就是要求的最大公约数 10 } 11 a=b;//辗转替换 12 b=t; 13 } 14 return a; 15 }
1 //递归简化代码 2 int gcd(int a, int b) 3 { 4 return a%b==0?b:gcd(b,a%b);//理解辗转相除法原理后可以轻易理解,辗转相除本身就是一种递归; 5 }