辗转相除法求两数最大公约数的正确性证明
2022-03-19 11:56 没有波澜的天空 阅读(125) 评论(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
与条件矛盾
得证