1 #题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
代码:
3 m = int(input('请输入第一个正整数:'))
4 n = int(input('请输入第二个正整数:'))
5 i = 1
6 j = 1
7 limax = []
8 li1 = []
9 li2 = []
10 li = []
11 while (i > 0 and i < m and i < n):
12 if (m%i == 0 and n%i == 0):
13 limax.append(i)
14 i += 1
15 print('%d和%d的最大公约数为%d'%(m,n,max(limax)))
16
17 while (j > 0):
18
19 li1.append(j*m)
20 li2.append(j*n)
21 for x in li1:
22 for y in li2:
23 if x == y:
24 print('%d和%d的最小公倍数是:%d'%(m,n,x))
25 j = -1
26 j += 1运行结果:
[root@HK code_100]# python code_16.py 请输入第一个正整数:4 请输入第二个正整数:7 4和7的最大公约数为1 4和7的最小公倍数是:28 [root@HK code_100]# python code_16.py 请输入第一个正整数:14 请输入第二个正整数:21 14和21的最大公约数为7 14和21的最小公倍数是:42 [root@HK code_100]# [root@HK code_100]# python code_16.py 请输入第一个正整数:40 请输入第二个正整数:60 40和60的最大公约数为20 40和60的最小公倍数是:120 [root@HK code_100]#
代码分析:
3 m = int(input('请输入第一个正整数:')) #接收第一个数
4 n = int(input('请输入第二个正整数:')) #接收第二个数
5 i = 1
6 j = 1
7 limax = []
8 li1 = []
9 li2 = []
10 li = []
11 while (i > 0 and i < m and i < n): #当i>0并且i<m并且i<n,最大公约数一定比这个数小
12 if (m%i == 0 and n%i == 0): #如果一个数能被m和n同时整除
13 limax.append(i) #将符合条件的数添加到列表limax
14 i += 1 #i循环+1,当i不满足while条件时跳出循环
15 print('%d和%d的最大公约数为%d'%(m,n,max(limax))) #格式化输出最大公约数,limax列表中的最大的数就是m和n的最大公约数
16
17 while (j > 0): #确定循环条件
18
19 li1.append(j*m) #创建list,为m的所有倍数
20 li2.append(j*n) #创建list,为n的所有倍数
21 for x in li1: #遍历li1
22 for y in li2: #遍历li2
23 if x == y: #当两个list中有一项相等时
24 print('%d和%d的最小公倍数是:%d'%(m,n,x)) #打印这个第一个出现的相等的数,这个数就是m和n的最下公倍数
25 j = -1 #修改while判断条件,跳出循环
26 j += 1 #j循环+1,逐渐扩充列表
















