少儿Python每日一题(8):最大公约数和最小公倍数

求两个数的最大公约数和最小公倍数是非常经典的题型。无论是等级考试还是竞赛题中都会出现。此类题目同时多次出现在蓝桥杯、NOC的比赛中以及电子学会、NCT的Python考级原题中,它们的区别仅仅在于是否对算法复杂度有要求,题目还是这个样子。这里就不列举原题了,我们直接来看看如何解决这类问题吧。

一、最大公约数

输入两个正整数m和n,计算出这两个数的最大公约数并输出。

输入:

一行输入两个正整数,以空格隔开

输出:

两个数的最大公约数

输入样例:

12 18

输出样例:

6

这个问题有多种解决方法,最直观的方法我们首先想到的是枚举法。枚举法顾名思义从指定的范围内一个个找到我们需要的答案,找到答案后退出循环。

从数学的知识我们可以知道,我们首先要知道两个数中谁大谁小。最大公约数最大值为较小的数(如3和6的最大公约数),最小值为1(如3和5的最大公约数)。因此我们循环时需要从最大可能性依次减小,一直循环到1。枚举法的代码也很容易得到:

m, n = map(int, input().split())
a = min(m, n) # 求出m和n中的最小值
for i in range(a, 0, -1):
    if m % i == 0 and n % i == 0:
        print(i)
        break

这种方法虽然思路简单,但是并不是最优解。如果输入的数值较小看不出什么问题,假设输入两个十位数的质数,求它们的最大

你可能感兴趣的:(少儿Python编程每日一题,算法,python,青少年编程,开发语言,蓝桥杯)