结论
如果p,q均是正整数且互质,那么px+qy(x≥0,y≥0)不能表示的最大的数为pq−p−q=(p−1)(q−1)−1。
证明
首先证明pq−p−q不能被px+qy(x≥0,y≥0)表示出来。
反证法。假设pq−p−q可以被px+qy表示,即pq−p−q=px+qy,那么就有pq=p(x+1)+q(y+1)。
由于p∣pq, p∣p(x+1),所以有p∣q(y+1)。又因为p和q互质,所以p∣(y+1)。又因为y≥0,因此有p≤y+1,两边同时乘上q,所以有q(y+1)≥pq。
同理可证p(x+1)≥pq。
所以有p(x+1)+q(y+1)≥2pq>pq,矛盾。
因此有pq−p−q不能被px+qy(x≥0,y≥0)表示出。
下面证明大于pq−p−q的数一定可以用px+qy表示出来(x≥0, y≥0)。
假设有n>pq−p−q,可以表示为n=pq−p−q+z(z>0)。其中我们将z表示为z=k×min{p,q}+r,其中k≥0, 0≤r<min{p,q}, z>0。
由于gcd(p,q)=1,根据裴蜀定理必然存在整数x和y使得等式px+qy=r成立。
因此r就可以用p和q来表示了,所以z也可以用p和q来表示了,所以有
n=pq−p−q+z=pq−p−q+k×min{p,q}+px+qy=(q−1+x)p+(y−1)q+k×min{p,q}
我们下面可以证明有
{q−1+x≥0y−1≥0
对于等式px0+qy0=r(0≤r<min{p,q}),可以发现至少存在一个解x或y是要≥0的。
可以用反证法,假设两个解都是小于0的,由于p, q>0因此必然有px+qy<0,这就与0≤r<min{p,q}矛盾了。
假设有x0和y0满足等式px0+qy0=r,那么x和y的通解为
{x=x0+kqy=y0−kp
对于r=0的情况,我们可以有x=0, y=0,取k=−1,代入到通解中,解就变成了y=p, x=−q。因此对于两个解都取0的情况,我们可以转换为一个大于0,另一个小于0。因此对于0≤r<min{p,q},变成了至少存在一个解大于0。
根据通解,我们规定将y都转换成0<y≤p这个区间范围内,此时对应的x=r−yqp。
根据0<y≤p有r−pq≤r−yq<rr−pqp≤r−yqp<rp即r−pqp≤x<rp因为x是整数,因此有⌈r−pqp⌉≤r−yqp<⌊rp⌋即⌊r−pq+p−1p⌋≤r−yqp<⌊rp⌋又因为0≤r<min{p,q},因此⌊rp⌋=0,因此有⌊r−1+(1−q)pp⌋≤r−yqp<⌊rp⌋即1−q≤x<0。
因此对应任意一组满足等式px0+qy0=r(0≤r<min{p,q})的解x0, y0,我们都可以根据通解把解转换到0<y≤p, 1−q≤x<0这个区间范围内。
即有y≥1, x≥1−q,满足上面给出的方程组
{q−1+x≥0y−1≥0
因此对于n=(q−1+x)p+(y−1)q+k×min{p,q},无论min{p,q}是p还是q,等式中p和q的系数都是满足≥0的。即证明了大于pq−p−q的数一定可以用px+qy来表示出来(x≥0, y≥0)。
综上所述,定理得证。
参考例题
小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。
每种金币小凯都有无数个。
在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。
现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?
注意:输入数据保证存在小凯无法准确支付的商品。
输入格式
输入数据仅一行,包含两个正整数 a 和 b,它们之间用一个空格隔开,表示小凯手中金币的面值。
输出格式
输出文件仅一行,一个正整数 N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。
数据范围
1≤a,b≤109
输入样例:
输出样例:
这题就是考察这个结论,对应的AC代码如下:
1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4
5 int main() {
6 int a, b;
7 cin >> a >> b;
8 cout << (a - 1ll) * (b - 1) - 1;
9
10 return 0;
11 }
参考资料
AcWing 525. 小凯的疑惑:https://www.acwing.com/solution/acwing/content/3165/
数论:px+py 不能表示的最大数为pq-p-q的证明:https://www.cnblogs.com/Yuzao/p/7074465.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效