辗转相除法求两数最大公约数的正确性证明
2022-03-19 11:56 没有波澜的天空 阅读(135) 评论(0) 编辑 收藏 举报等同于证明两个问题(下面的变量都是整数)
1、求解的结果是两数的公约数
2、求解的结果是公约数里最大的
先来证明1,相当于证明:
如果a/b=c余d(条件1)且b/d=m(条件2)
那么a/d=n(也就是a=d*n)
把条件1转化一下为a=c*b+d
把条件2转化一下为b=d*m
把条件2带入条件1为a=c*d*m+d 进一步转化为a=d*(c*m+1)
c*m+1肯定也是一个整数,相当于a=d*n
得证
然后来证明2,可以用反证法
如果a/b=c余d(条件1)且b/d=m(条件2),那么在(d,b)开区间内不可能存在这样一个数x
使得a/x=t且b/x=s
加入存在这样一个数
那么有a=t*x(条件3)且b=s*x(条件4)
把条件1转化一下为a=c*b+d
把条件2转化一下为b=d*m
我们需要证明在条件3和条件4的情况下,条件1和条件2是矛盾的
将条件3和条件4代入条件1
t*x=c*s*x+d -> s=(t*x-d)/c*x
将条件3和条件4代入条件2
s*x=d*m ->s=d*m/x
得到(t*x-d)/c*x=d*m/x ->(t*x-d)/c=d*m ->(t*x-d)=d*m*c ->tx=d(m*c+1)
由于x>d必然有t>m*c+1
而m=b/d
c=(a-d)/b
得到t>(a-d)/d+1 ->t>a/d
因为t=a/x
那么a/x>a/d
x<d
与条件矛盾
得证
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通