牛客1047-得不到的爱情

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

题目表述

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

输入描述:

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

输出描述:

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

示例1

输入

2 3

输出

1

解题思路:

已知条件一:小女孩的食材是无限的。
因此我们可以假设小女孩有x个番茄,y个鸡蛋(x,y可取任意值)

已知条件二:番茄和蛋的质量分别为N克和M克(N和M都是正整数且互素)

求:K

可列出求解公式:N*x+M*y=K

K值需要满足的条件:K能够取一个最大的值使得上面这个方程没有整数解(K值既不能为N或M的倍数,也不能为N+M的倍数)

方法一:画图找规律

在这里插入图片描述
以N=3,M=5为例
我们先从1开始,1,2,3…一个接一个列出数字,然后划掉不符合K值条件的数字,最后发现符合K值的最大数字为7。

但仅通过画图找规律,比较难发现K=N*M-N-M这样的结论。

所以本题推荐直接使用下面这个塞瓦维斯特定理

方法二:使用塞瓦维斯特定理

塞瓦维斯特定理
当a,b两数均大于1且a,b互为素数(gcd(a,b)等于1),满足方程ax+by=c无整数解的c的最大值为a*b-a-b。

所以本题中,我们要求解的K值就等于N*M-N-M

代码

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
    
    
	long long N,M,K;
	scanf("%d %d",&N,&M);
	K=N*M-N-M;
	printf("%d",K);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_62239233/article/details/132695796
今日推荐