题意
传送门 P3951 小凯的疑惑 / [蓝桥杯2013省]买不到的数目
题解
已知 g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1,求不满足 a x + b y = c , x ≥ 0 , y ≥ 0 ax+by=c,x\geq 0,y\geq 0 ax+by=c,x≥0,y≥0 最大的正整数 c c c。
设线性方程
a
x
+
b
y
=
c
ax+by=c
ax+by=c 的一组特解为
x
0
,
y
0
x_0,y_0
x0,y0,则通解为
{
x
=
x
0
+
b
t
y
=
y
0
−
a
t
\begin{cases} x=x_0+bt \\ y=y_0-at \\ \end{cases}
{x=x0+bty=y0−at 其中
t
∈
Z
t\in \Z
t∈Z。目标是构造出一个
c
c
c 使
x
,
y
x,y
x,y 异号,设特解满足
{
x
0
>
0
,
y
0
<
0
,
t
≥
0
x
0
<
0
,
y
0
>
0
,
t
<
0
\begin{cases} x_0>0,y_0<0,t\geq 0\\ x_0<0,y_0>0,t<0\\ \end{cases}
{x0>0,y0<0,t≥0x0<0,y0>0,t<0 那么得到
{
0
<
x
0
<
b
−
a
<
y
0
<
0
\begin{cases} 0<x_0<b\\ -a<y_0<0\\ \end{cases}
{0<x0<b−a<y0<0 又由整数的离散性可知
{
1
≤
x
0
≤
b
−
1
−
a
+
1
≤
y
0
≤
−
1
\begin{cases} 1\leq x_0\leq b-1\\ -a+1\leq y_0\leq -1\\ \end{cases}
{1≤x0≤b−1−a+1≤y0≤−1 取
x
0
,
y
0
x_0,y_0
x0,y0 的最大值,即
x
0
=
b
−
1
,
y
0
=
−
1
x_0=b-1,y_0=-1
x0=b−1,y0=−1 带入线性方程,得到
c
=
a
×
(
b
−
1
)
+
b
×
−
1
=
a
b
−
a
−
b
c=a\times (b-1)+b\times -1=ab-a-b
c=a×(b−1)+b×−1=ab−a−b 数据保证存在这样的
c
c
c,那么最大值的存在性也可以这样解释:将
x
,
y
x,y
x,y 参数方程联立,求解得直线方程
y
=
−
a
b
x
+
a
b
x
0
+
y
0
y=-\frac{a}{b}x+\frac{a}{b}x_0+y_0
y=−bax+bax0+y0 与坐标轴的交点为
(
0
,
a
b
x
0
+
y
0
)
,
(
x
0
+
b
a
y
0
,
0
)
(0,\frac{a}{b}x_0+y_0),(x_0+\frac{b}{a}y_0,0)
(0,bax0+y0),(x0+aby0,0)
c
>
0
c>0
c>0,故直线与横纵坐标交点在正半轴上。当
c
,
c
∈
Z
c,c\in\Z
c,c∈Z 增大,
x
0
,
y
0
x_0,y_0
x0,y0 随之线性增大,直线向上平移;在某个位置往上,直线在第一象限的部分必然会出现横纵坐标为整数的点。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll a, b;
scanf("%lld%lld", &a, &b);
printf("%lld\n", a * b - a - b);
return 0;
}