# 第9期-最大公约数与最小公倍数

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 1 问题描述

用数字 a 和 b举例最大公约数和最小公倍数:
最大公约数:如果存在数 x, 满足 a 和 b 均可以整除 x,则 x 为 a 和 b 的公约数,当 x 最大时,为最大公约数;
最小公倍数:如果存在数 y, 满足 a 和 b 均可以被y整除,则 y 为 a 和 b 的公倍数,当 y 最小时,为最小公倍数;

请用户输入两个正整数,求其最大公约数和最小公倍数~

# 2 解题思路

最大公约数,就是能同时被两个数整除的最大整数,既然要能同时被两个数整除,这个数必然是小于等于两个数中的较小者
第一步: 找出两个数中的较小数
第二步: 从较小数开始遍历到1
第三步: 遍历过程中最先能同时被两个数整除的就是最大公约数

最小公倍数,就是能同时将两个数整除的最小整数,因此这个数必然大于等于两个数中的较大者
第一步: 找出两个数中的较大数
第二步: 从较大数开始递增遍历
第三步: 遍历过程中最先能同时将两个数整除的就是最小公倍数

# 3 解题方法

num1 = int(input("请输入一个整数:"))
num2 = int(input("请输入另一个整数:"))

assert num1 > 0 and num2 > 0, "请输入正整数!"

min_num = min(num1, num2)
max_num = max(num1, num2)

for i in range(min_num, 0, -1):
    if num1 % i == 0 and num2 % i == 0:
        break
print(f"{num1}{num2}的最大公约数是{i}")


while True:
    if max_num % num1 == 0 and max_num % num2 == 0:
        break
    max_num += 1
print(f"{num1}{num2}的最小公倍数是{max_num}")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

第1-2行: 分别定义变量num1,num2,input函数使用户输入数字,再用int函数将输入的字符串转换为整型
第4行: 因为对正整数求最大公约数和最小公倍数,所以用assert断言函数限定变量num1和num2大于0,若大于0,执行后面的代码,否则报错“AssertionError: 请输入正整数!”

该函数的语法结构是:assert 表达式 [, 参数]
assert用来断言该表达式是否为真,若表达式为真,执行后续操作,否则触发异常,引发AssertionError,抛出异常参数,终止代码运行。

第6-7行: 定义变量min_num和max_num,分别用min和max函数找出num1和num2的最小值与最大值
第9-11行: 求最大公约数,用for循环从较小值遍历到1,if语句判断第一次出现能同时被num1、num2整除的数,则为最大公约数,此时break退出循环,终止遍历
第12行: 用print函数打印最大公约数的求值结果
第15-18行: 利用while循环从较大值开始进行递增遍历,if语句判断首次出现能同时将num1、num2整除的数,则为最小公倍数,此时用break退出循环,否则max_num在原有基础上加1,直到满足上述条件,退出循环为止。
第19行: 用print函数打印最小公倍数的求值结果

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM