我怎样才能证明我最大的除数计数的正确性?

时间:2015-10-23 19:57:34

标签: python

我需要编写一个程序,打印两个输入整数的最大公约数,并证明它的正确性。我写了以下内容:

def main():

    x = int(input("Enter the first integer: "))
    y = int(input("Enter the second integer: "))
    print(gcd(x,y))

def gcd(x,y):
    if x > y:
        smaller  = y
    else:
        smaller = x

    for i in range(1, smaller + 1):
        if ((x % i == 0) and (y % i == 0)):
            gcd = i

    return gcd

main()

前提条件显然xy应该是两个整数。后置条件是xy的最大公约数。我需要识别循环不变量,并在初始化后显示它是正常的,它在每次迭代后都保持为真。另外,我想通过使用循环不变来证明后置条件,并证明循环是有限的。

我认为循环不变量是i总是小于或等于xyx % i = ry % i = s对于某些整数{ {1}}和r。这显然适用于每次迭代。循环一直持续到sr = 0,然后终止。由于迭代具有上限,因此保证了有限性。

我的推理是否正确?这证明了循环的正确性吗?

1 个答案:

答案 0 :(得分:1)

如果您在进入循环之前将gcd变量初始化为1,那么我认为您可以更清楚地说明循环不变量(如果您在2以上,那么该变量将超过gcd想)。你的不变量将是:

  

i是小于或等于x % gcd == y % gcd == 0的最大整数,i

你的循环结束是因为i == min(x, y)遍历有限范围(以gcd结尾)。后置条件是xy和{{1}}的最大公约数,它由循环不变量证明(只要你可以证明两个数字的GCD不大于他们中的较小者。)