把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

NOIp D1T1 小凯的疑惑

吐槽

果然让人很疑惑,这道题,对于我这种数学渣渣来说太不友好了,哪里想得到结论,猜也猜不到。

思路一

纯数学,见过的飞快切掉,没见过的就...

 


结论就是:已知a,b为大于1的互质的正整数,则使不定方程ax+by=c 不存在非负整数解的最大整数
好像是叫什么赛瓦维斯特定理,但是除了这道题的题解之外,我没有在其它任何地方搜到,跟数学相关的痕迹一点都没有,太神奇了,难道这是一个只有OIer才研究的公式
证明一下吧。
首先,先证ax+by=ababa,b>1,(a,b)=1不存在非负整数解。
用反证法,假设存在x>=0,y>=0,使得 ax+by=ababa,b>1,(a,b)=1成立。

移项,得a(x+1)+b(y+1)=ab

a(x+1)=b(ay1)
又因为(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)=ab矛盾,所以假设不成立。


接下来,需要证明ax+by=c (a,b>1,(a,b)=1)中,对于所有的c>abab,方程都存在非负整数解

c=ka+mab(k>=b,a<=m<=a1),即ax+by=ka+mab(k>=b,1<=m<=a1)

因为(a,b)=1,根据裴蜀定理,可知存在x0,y0Z,使ax0+by0=1

所以存在x0,y0Z,使ax0+by0=m

y0=(max0)/b,对于m的不同,有b1x0的取值,使得y0是整数

我们令(b1)<=x0<=1,以此来先保证y0>=0

由于ax0>1,m>=1,所以事实上y0>=1

于是取y=y01,则y>=0

x0=(mby0)/a,

x=(ka+mabby)/a=k1+(mbby)/a=k1+(mbb(y01))/a=k1+(mby0)/a=k1+x0

又因为(b1)<=x0<=1,则(b1)+k1<=x<=1+k1,b+k<=x<=k2

又因为k>=b,则b+k>=0,则x>=0

得证。

思路二

暴力打表找规律,不过在没有OEIS的情况下我一般都找不出来的...

 

a=2,b=3,ans=1

 

a=2,b=5,ans=3

 

a=2,b=7,ans=5

 

a=3,b=5,ans=7

 

a=3,b=7,ans=11

 

a=5,b=7,ans=23

 

a=5,b=11,ans=39

这就要看运气了

 

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 }
复制代码

 

posted @   Starlight_Glimmer  阅读(180)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示