吐槽
果然让人很疑惑,这道题,对于我这种数学渣渣来说太不友好了,哪里想得到结论,猜也猜不到。
思路一
纯数学,见过的飞快切掉,没见过的就...
结论就是:已知a,b为大于1的互质的正整数,则使不定方程ax+by=c 不存在非负整数解的最大整数
好像是叫什么赛瓦维斯特定理,但是除了这道题的题解之外,我没有在其它任何地方搜到,跟数学相关的痕迹一点都没有,太神奇了,难道这是一个只有OIer才研究的公式
证明一下吧。
首先,先证ax+by=ab−a−b(a,b>1,(a,b)=1)不存在非负整数解。
用反证法,假设存在x>=0,y>=0,使得 ax+by=ab−a−b(a,b>1,(a,b)=1)成立。
移项,得a∗(x+1)+b∗(y+1)=a∗b
a∗(x+1)=b∗(a−y−1)
又因为(a,b)=1
则 b∣(x+1)
同理可证:a|(y+1)
又因为x>=0,y>=0
所以x>=b,y>=a
则a∗(x+1)+b∗(y+1)>=ab+ba>=2ab
因为a>1,b>1
所以ab>1
所以2ab>a
与之前假设的a∗(x+1)+b∗(y+1)=a∗b矛盾,所以假设不成立。
接下来,需要证明ax+by=c (a,b>1,(a,b)=1)中,对于所有的c>ab−a−b,方程都存在非负整数解
设c=ka+m−a−b(k>=b,a<=m<=a−1),即ax+by=ka+m−a−b(k>=b,1<=m<=a−1)
因为(a,b)=1,根据裴蜀定理,可知存在x0,y0∈Z,使ax0+by0=1
所以存在x0,y0∈Z,使ax0+by0=m
y0=(m−ax0)/b,对于m的不同,有b−1种x0的取值,使得y0是整数
我们令−(b−1)<=x0<=−1,以此来先保证y0>=0
由于−ax0>1,m>=1,所以事实上y0>=1
于是取y=y0−1,则y>=0
则x0=(m−by0)/a,
x=(ka+m−a−b−by)/a=k−1+(m−b−by)/a=k−1+(m−b−b(y0−1))/a=k−1+(m−by0)/a=k−1+x0
又因为−(b−1)<=x0<=−1,则−(b−1)+k−1<=x<=−1+k−1,−b+k<=x<=k−2
又因为k>=b,则−b+k>=0,则x>=0
得证。
思路二
暴力打表找规律,不过在没有OEIS的情况下我一般都找不出来的...







这就要看运气了
Update:看到一份很精妙的题解 来源及作者见图片

代码
说实话,这道题不贴代码都可以qwq
1 #include<iostream>
2 #include<string>
3 #include<cstdio>
4 #include<cstring>
5 #include<queue>
6 #include<algorithm>
7 #include<vector>
8 using namespace std;
9 #define N 255
10 #define ll long long
11 #define INF 0x3f3f3f3f
12 ll a,b;
13 int main()
14 {
15 scanf("%lld %lld",&a,&b);
16 printf("%lld\n",a*b-a-b);
17 return 0;
18 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现