番茄炒蛋

链接: https://ac.nowcoder.com/acm/contest/18839/1047

来源: 牛客网

时间限制: C/C++ 1秒,其他语言2秒

空间限制: C/C++ 262144K,其他语言524288K

64bit IO Format: %lld

题目描述

Chranos是个数学天才。

一天,有一个可爱的小女孩追求Chranos,他知道Chranos最喜欢当且仅当总质量为K克的时候的番茄炒蛋了。她希望通过美食俘获Chranos的胃,这样就一定可以和他在一起了吧!虽然小女孩有无限数量的食材,但是数学王国的番茄和蛋非常特殊,他们的质量分别为N克和M克。为了表现一颗完整的心、表达充足的爱意,所有的食材必须被用完。N和M都是正整数且互素,制作过程中既不会凭空增加质量,也不会凭空消失质量。

Chranos不希望小女孩打扰他学数学。他发现,并不是所有番茄炒蛋都是可以被制作出来的。他想找出最大的不可以被制作出的总质量K来拒绝小女孩,这样Chranos就可以永远和数学在一起了!

输入描述:

第一行为正整数N和M(2 ≤ N, M ≤ 50000)。

输出描述:

输出最大的不可以被制作出的总质量K。

示例1

输入

2 3

输出

1

解题思路:

根据题意可知,对于给定的N和M,要制作出总质量为K的番茄炒蛋,需要满足以下条件:

  1. K必须是N和M的倍数
  2. K不能大于N+M

由于N和M互素,所以对于任意正整数K,K都可以表示为N的倍数和M的倍数的和。即存在x和y,使得K = xN + yM。

根据以上条件,我们可以通过遍历K的值,从N+M-1到1,依次判断K是否满足以上条件。如果找到一个不满足条件的K,则输出该K,否则输出1。

具体步骤如下:

  1. 读取输入的N和M。
  2. 初始化变量K为N+M-1。
  3. 从K开始依次递减,判断K是否满足以上条件: a. 如果K是N和M的倍数,则继续判断下一个K。 b. 如果K大于N+M,则继续判断下一个K。 c. 如果K不满足以上两个条件,则输出K,并结束循环。
  4. 如果循环结束仍未找到不满足条件的K,则输出1。

下面是实现该算法的C++代码:

#include <iostream>
using namespace std;

int main() {
    int N, M;
    cin >> N >> M;
    int K = N + M - 1;
    while (K > 0) {
        if (K % N == 0 && K % M == 0 && K <= N + M) {
            cout << K << endl;
            return 0;
        }
        K--;
    }
    cout << 1 << endl;
    return 0;
}

时间复杂度分析:

由于需要遍历从N+M-1到1的所有数,所以时间复杂度为O(N+M)。


原文地址: http://www.cveoy.top/t/topic/2g8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录