当前位置:首页>python>Python零基础|枚举倍数法,轻松搞定最小公倍数(附值日应用题)

Python零基础|枚举倍数法,轻松搞定最小公倍数(附值日应用题)

  • 2026-10-11 07:17:33
Python零基础|枚举倍数法,轻松搞定最小公倍数(附值日应用题)

很多初学Python的同学,遇到「最小公倍数」的算法题,总是一脸懵。

尤其是碰到经典的值日重叠、周期重合、相遇问题,完全不知道代码该怎么写。

今天给大家分享最适合新手、最好理解、零门槛的解法:枚举倍数法。

不用记复杂公式,不用懂高深数学,看完直接吃透!


一、先搞懂:什么是最小公倍数?

举个生活化的题目,完美对应我们的算法场景:

题目:小杨、小红轮流值日,小杨每 m 天值日一次,小红每 n 天值日一次。今天两人一起值日,至少多少天后,他们会再次同一天值日?

答案本质:求 m 和 n 的最小公倍数。

简单理解:

  • 公倍数:能同时被两个数整除的数(两人值日周期的重合天数)

  • 最小公倍数:所有重合天数里,最小的那一个(最早重合的天数)

例:3和4的公倍数有12、24、36……,最小公倍数就是12。


二、枚举倍数法核心思路

不绕弯、不套公式,核心逻辑只有一句话:

拿着其中一个数,不断累加自己,生成它的倍数 直到找到第一个能被另一个数整除的倍数,就是答案!

实操步骤:

  1. 固定其中一个数的倍数(比如固定 n 的倍数)

  2. 从 n 开始,依次生成:n、2n、3n、4n……

  3. 逐个判断,能否被 m 整除

  4. 第一个满足条件的数 = 最小公倍数


三、完整正确代码(可直接运行)

这是适配值日问题、枚举倍数法的标准代码,新手直接收藏:

# 输入两人的值日间隔天数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天一次)

  1. 初始 k = 4,4 % 3 = 1,不满足 → k = 4+4 = 8

  2. k = 8,8 % 3 = 2,不满足 → k = 8+4 = 12

  3. k = 12,12 % 3 = 0,满足条件,退出循环

最终输出 12,也就是至少12天后两人再次同一天值日。


六、新手高频易错坑(90%人都错过)

❌ 错误写法:n += n

很多同学写错循环累加代码,直接翻车死循环!

  • k += n(正确):固定加原数,生成连续倍数,能找到答案

  • n += n(错误):数字直接翻倍(4→8→16→32),跳过中间倍数,永远找不到正确值

记住口诀:求倍数,要累加原数,不要翻倍! 

七、知识点总结

  1. 值日重合、周期重合问题 = 求最小公倍数

  2. 枚举倍数法是新手最优解,逻辑直观、无需公式

  3. 新增变量 k,保护原始数据,是良好的代码习惯

  4. 核心:固定累加原数,遍历倍数,取第一个可整除的数

  • 后续会持续更新Python零基础算法、考试真题、易错知识点,新手可以持续打卡学习!

最新文章

随机文章