题目大意
用两种面值互质的金币支付商品,面值分别是p、q,问在不找零的情况下最贵的商品的价格是多少?
分析
用一个方程
p
x
+
q
y
=
n
(
g
c
d
(
p
,
q
)
=
1
)
px+qy=n(gcd(p,q)=1)
px+qy=n(gcd(p,q)=1),n最大且取不到正整数解。
先说答案是
n
=
p
q
−
p
−
q
n=pq-p-q
n=pq−p−q,但是怎么证明?
用反证法,证明
p
x
+
q
y
≠
p
q
−
p
−
q
px+qy\neq pq-p-q
px+qy̸=pq−p−q,设
p
x
+
q
y
=
p
q
−
p
−
q
px+qy=pq-p-q
px+qy=pq−p−q
首先代入原来的方程得到
p
x
+
p
+
q
y
+
q
=
p
q
px+p+qy+q=pq
px+p+qy+q=pq,也就是
p
(
x
+
1
)
+
q
(
y
+
1
)
=
p
q
p(x+1)+q(y+1)=pq
p(x+1)+q(y+1)=pq
因为
g
c
d
(
p
,
q
)
=
1
gcd(p,q)=1
gcd(p,q)=1且
p
∣
q
(
y
+
1
)
p|q(y+1)
p∣q(y+1)所以
p
∣
y
+
1
p|y+1
p∣y+1,同样的道理因为
g
c
d
(
p
,
q
)
=
1
gcd(p,q)=1
gcd(p,q)=1且
q
∣
p
(
x
+
1
)
q|p(x+1)
q∣p(x+1)所以
q
∣
x
+
1
q|x+1
q∣x+1
可以设
p
i
=
y
+
1
pi=y+1
pi=y+1,
q
j
=
x
+
1
qj=x+1
qj=x+1可得
p
q
j
+
q
p
i
=
p
q
pqj+qpi=pq
pqj+qpi=pq,所以
j
+
i
=
1
j+i=1
j+i=1
因为
x
>
0
x>0
x>0,
y
>
0
y>0
y>0所以
x
+
1
>
1
x+1>1
x+1>1,
y
+
1
>
1
y+1>1
y+1>1,即
q
j
>
1
qj>1
qj>1,
p
i
>
1
pi>1
pi>1,因为p,q均为正整数,所以j和i也是正整数,所以
j
+
i
j+i
j+i必然不少于2,与
j
+
i
=
1
j+i=1
j+i=1矛盾,所以
p
x
+
q
y
=
p
q
−
p
−
q
px+qy=pq-p-q
px+qy=pq−p−q
代码
#include <cstdio>
using namespace std;
long long a,b;
int main(){
freopen("math.in","r",stdin);
freopen("math.out","w",stdout);
scanf("%lld%lld",&a,&b);
return !printf("%lld",a*b-a-b);
}