对于辗转相除法的理解
1.辗转相除法的使用
例如:
求120和35的最大公约数
有120%35=15
35%15=5
15%5=0
此时5就是120和35的最大公约数
推理可知:
要求两个数的最大公约数,可用第一个数对第二个数取余,若余数不为0,则用除数再对余数取余,直到余数为0,此时的除数就是最大公约数
循环代码:
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
while(b!=0)
{
int c=a%b;
if(c==0)
break;
a=b;
b=c;
}
cout<<b;
return 0;
}
递归代码:
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}
2.辗转相除法的原理
辗转相除法求最大公约数原理:
设两数为a、b(a>b),用gcd(a,b)表示a,b的最大公约数,r=a mod b 为a除以b的余数,k为a除以b的商,即a÷b=k.......r。由辗转相除法的用法可知想证明辗转相除法即是要证明gcd(a,b)=gcd(b,r)。
第一步:令c=gcd(a,b),则设a=mc,b=nc
第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c
第三步:根据第二步结果可知c也是r的因数
第四步:假设m-kn=xd,n=yd (d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)cd,b=nc=ycd,则a与b的一个公约数cd>c,故c非a与b的最大公约数,与前面结论矛盾),推出m-kn与n互质,即m - kn 与 n 之间无公因数,又因为r = (m - kn)c , b = nc, 所以r和b的公因数只可能在c中 ,因次c是r,b的最大公因数。
从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。
证毕。
以上步骤的操作是建立在刚开始时r≠0的基础之上的。即m与n亦互质。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具