很多初学Python的同学,遇到「最小公倍数」的算法题,总是一脸懵。
尤其是碰到经典的值日重叠、周期重合、相遇问题,完全不知道代码该怎么写。
今天给大家分享最适合新手、最好理解、零门槛的解法:枚举倍数法。
不用记复杂公式,不用懂高深数学,看完直接吃透!
一、先搞懂:什么是最小公倍数?
举个生活化的题目,完美对应我们的算法场景:
题目:小杨、小红轮流值日,小杨每 m 天值日一次,小红每 n 天值日一次。今天两人一起值日,至少多少天后,他们会再次同一天值日?
答案本质:求 m 和 n 的最小公倍数。
简单理解:
例:3和4的公倍数有12、24、36……,最小公倍数就是12。
二、枚举倍数法核心思路
不绕弯、不套公式,核心逻辑只有一句话:
拿着其中一个数,不断累加自己,生成它的倍数 直到找到第一个能被另一个数整除的倍数,就是答案!
实操步骤:
固定其中一个数的倍数(比如固定 n 的倍数)
从 n 开始,依次生成:n、2n、3n、4n……
逐个判断,能否被 m 整除
第一个满足条件的数 = 最小公倍数
三、完整正确代码(可直接运行)
这是适配值日问题、枚举倍数法的标准代码,新手直接收藏:
# 输入两人的值日间隔天数m = int(input())n = int(input())# 复制n的值,用k循环计算,保护原始数据不被修改k = n# 只要不能被m整除,就继续累加n,生成新倍数while k % m != 0: k += n# 输出最小公倍数(最早重合值日天数)print(k)
四、逐行超通俗拆解
1. 接收输入数据
m = int(input()):小杨的值日间隔天数
n = int(input()):小红的值日间隔天数
2. 关键变量 k 的作用(新手最容易错的点)
k = n
很多同学疑惑:为什么不直接用 n 循环,非要多一个 k?
✅ k 的核心作用:中转站、保护原始数据
n 是我们的原始数据,不能随意修改;
k 专门用来跑循环、做累加、做判断,所有计算改动都交给 k,不破坏原始数值,代码逻辑更严谨。
3. 循环核心逻辑
while k % m != 0:只要 k 不能被 m 整除,说明不是共同值日的天数,继续找
k += n:固定累加原始n,生成 n 的倍数(n、2n、3n...)
4. 输出结果
找到第一个能整除的数,就是最小公倍数,直接打印答案。
五、实景演算演示(输入3、4)
输入:m=3(小杨3天一次),n=4(小红4天一次)
初始 k = 4,4 % 3 = 1,不满足 → k = 4+4 = 8
k = 8,8 % 3 = 2,不满足 → k = 8+4 = 12
k = 12,12 % 3 = 0,满足条件,退出循环
最终输出 12,也就是至少12天后两人再次同一天值日。
六、新手高频易错坑(90%人都错过)
❌ 错误写法:n += n
很多同学写错循环累加代码,直接翻车死循环!
记住口诀:求倍数,要累加原数,不要翻倍!
七、知识点总结
值日重合、周期重合问题 = 求最小公倍数
枚举倍数法是新手最优解,逻辑直观、无需公式
新增变量 k,保护原始数据,是良好的代码习惯
核心:固定累加原数,遍历倍数,取第一个可整除的数
- 后续会持续更新Python零基础算法、考试真题、易错知识点,新手可以持续打卡学习!