辗转相除法求最大公约数
2022-05-17 17:10 钟铧若岩 阅读(450) 评论(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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?