浙大“python->机器语言“的学习二(循环计算)

辗转相除Euclid

  1. 设a, b为两个自然数,欲求a, b的最大公约数
  2. 若a%b为0,则b就是a, b的最大公约数,计算结束
  3. 否则令a为b,而b为原来的a%b,重复步骤2
a, b = map(int, input().split())
while True:
    r = a%b
    if r==0:
        break
    a = b
    b = r
print(b)

 

辗转相除Euclid

为方便实现代码,做一点变形:

  1. 设a, b为两个自然数,欲求a, b的最大公约数
  2. 若b为0,则a就是a, b的最大公约数,计算结束
  3. 否则令a为b,而b为原来的a%b,重复步骤2
a, b = map(int, input().split())
while True:
    if b==0:
        break
    r = a%b
    a = b
    b = r
print(a)

 

 

变形之后,代码可以进一步简化:

a, b = map(int, input().split())
while True:
    if b==0:
        break
    #r = a%b
    #a = b
    #b = r
    a, b = b, a%b
print(a)

 

还可以进一步变形:

a, b = map(int, input().split())
#while True:
#    if b==0:
#        break
while b:
    a, b = b, a%b
print(a)

 

再次进行优化:

while b > 0:
    a, b = b, a % b
  • 有必要先判断x和y的大小,保证进入循环的时候,x是较大的数吗?
posted @ 2023-01-26 00:34  Alaso_shuang  阅读(35)  评论(0编辑  收藏  举报
2 3
4