专栏文章

B4355 [GESP202506 一级] 值日

B4355题解参与者 10已保存评论 10

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
9 条
当前快照
1 份
快照标识符
@miope7wa
此快照首次捕获于
2025/12/02 22:58
3 个月前
此快照最后确认于
2025/12/02 22:58
3 个月前
查看原文
欢迎报名洛谷网校,期待和大家一起进步!

小杨每 mm 天值日一次,意味着他值日的天数一定是 mm 的倍数,比如第 mm 天,第 2×m2 \times m 天,第 3×m3 \times m 天,以此类推。同样,小红值日的天数也一定是 nn 的倍数。他们要再次相遇在同一天值日,那么这一天必须同时是 mm 的倍数和 nn 的倍数。题目要求我们找出“至少多少天后”,也就是寻找满足这个条件的最小天数。这个数在数学上被称为 mmnn 的“最小公倍数”。
那么,我们如何找到这个最小公倍数呢?最直接、最容易理解的方法就是从小到大进行枚举。我们可以从第 1 天开始,依次检查第 2 天、第 3 天……对于每一天,我们都去判断它是否既能被 mm 整除,又能被 nn 整除。我们找到的第一个同时满足这两个条件的数字,就一定是最小的那个,也就是我们想要的答案。因为我们是从小到大顺序查找的,所以第一个找到的必然是最小值。
在编写 C++ 代码时,这个思路可以很方便地用一个循环来实现。我们可以设置一个循环,让一个变量(比如 ii)从 1 开始不断地增加。在每一次循环中,我们都用取余运算符(%)来检查 ii 是否能同时被 mmnn 整除。如果 i % m == 0 并且 i % n == 0 这两个条件同时成立,那么 ii 就是我们寻找的答案。此时,我们就可以输出 ii,然后结束程序。
参考代码:
CPP
for (int i = 1; ; ++i) {
    if (i % m == 0 && i % n == 0) {
        cout << i << endl;
        break;
    }
}

评论

10 条评论,欢迎与作者交流。

正在加载评论...