1.2.1 数学归纳法
令P(n)是关于整数n的某个命题,假定我们需要证明P(n)对于所有正整数n为真,一种重要的做法是:
(a) 证明P(1)为真;
(b) 证明“如果P(1),P(2),...,P(n)全部为真,那么P(n+1)也为真”,这个证明应对任意正整数n成立。
数学归纳法的算法形式
算法I(构造证明). 给定一个正整数n,这个算法将产生P(n)为真的证明。
I1. [证明P(1).]置 k ← 1,证明P(1)为真
I2.[k=n?] 如果k=n,算法终止,所需的证明已经输出。
I3.[证明P(k+1).] 证明:如果P(1),...,P(k)全部为真,那么P(k+1)为真
I4.[增加k.]k增加1,转到步骤I2
数学归纳法的应用
通过归纳法证明算法E对所有m和n都能得到正确答案,即能找到最大公约数。
算法E(推广的欧几里得算法).给定两个正整数m和n,计算它们的最大公因数d,并计算两个未必为正数的整数a和b,使得am+bn=d。
E1.[初始化.] 置a′←b←1,a←b′←0,c←m,d←n.
E2.[除法.]令q和r分别是用d除c所得的商和余数.(于是有c=qd+r和0≤r<d.)
E3.[余数为0?]如果r=0,算法终止,此时有am+bn=d,正如所求。
E4.[循环.]置c←d,d←r,t←a′,a′←a,a←t−qa,t←b′,b′←b,b←t−qb,然后返回E2.
证明:
当n=1时,算法执行到E2,此时c=m,d=1,那么q=m,r=0;随后算法执行到E3时终止。算法有效。
当n>1时,且m是n的倍数。此时与n=1时类似,其实n=1是此种情形的特例。算法有效。
按归纳法可以假设,当1≤k<n时,d的最终值是m和k的最大公约数,算法均有效。
当n>1时,且m不是n的倍数。算法第一次执行后:c←n,d←r,由于r<n,根据归纳假设:d的最终值是n和r的最大公约数。
又根据1.1节给出的结论(讨论算法的5个特征中的“输出”部分给出的结论),数偶{m,n}和{n,r}具有相同的公因数,特别地,它们具有相同的最大公因数。
因此,d也是m和n的最大公约数,此时算法有效。
关于E4中a、a′、b和b′更新规则的说明:
在计算过程中,c=qd+r,a′和b′分别为前一轮的a和b,于是:a′m+b′n=c,am+bn=d
由c=qd+r可得r=c−qd,由于c=a′m+b′n,d=am+bn,带入r=c−qd可得:
r=(a′m+b′n)−q(am+bn)
r=(a′−qa)m+(b′−qb)n