不定方程(一)一次不定方程

135 阅读2分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

一次不定方程的求解

不定方程

设整数 k2,c,a1,...,akk\ge2,c,a_1,...,a_k 是整数且 a1,...,aka_1,...,a_k 是整数且 a1,...,aka_1,...,a_k 均不等于 0,以及变量 x1,...,xkx_1,...,x_k 是整数变量,方程

a1x1+...+akxk=ca_1x_1+...+a_kx_k=c

称为 kk 元一次不定方程。a1,...,aka_1,...,a_k 称为它的系数。

kk 元一次不定方程有解的充分必要条件

不定方程 a1x1+...+akxk=ca_1x_1+...+a_kx_k=c 有解的充分必要条件是它的系数的最大公约数 (a1,...,ak)c(a_1,...,a_k)\mid c。且该方程的解与不定方程

a1(a1,...,ak)x1+...+ak(a1,...,ak)xk=c(a1,...,ak)\frac{a_1}{(a_1,...,a_k)}x_1+...+\frac{a_k}{(a_1,...,a_k)}x_k=\frac{c}{(a_1,...,a_k)}

的解相同。

二元一次不定方程的通解

设二元一次不定方程

a1x1+a2x2=ca_1x_1+a_2x_2=c

有解,x1,0,x2,0x_{1,0},x_{2,0} 是它的一组解,tt 为任一整数,则上式的通解为:

{x1=x1,0+a2(a1,a2)t,x2=x2,0a1(a1,a2)t,\begin{cases} x_1=x_{1,0}+\frac{a_2}{(a_1,a_2)}t, \\ x_2=x_{2,0}-\frac{a_1}{(a_1,a_2)}t, \end{cases}

带入原方程即可显然验证。

二元一次不定方程的非负解和正解

当二元一次不定方程 a1x1+a2x2=ca_1x_1+a_2x_2=c 有解时,我们进行如下讨论:

显然当 a1,a2a_1,a_2 异号时,二元一次不定方程 a1x1+a2x2=ca_1x_1+a_2x_2=c 有无穷多组非负解或正解。

系数为正数的二元一次不定方程的非负解和正解

a1,a2,ca_1,a_2,c 均为正整数,(a1,a2)=1(a_1,a_2)=1,那么当 c>a1a2a1a2c>a_1a_2-a_1-a_2 时,不定方程 a1x1+a2x2=ca_1x_1+a_2x_2=c 有非负解,解数等于 [c/(a1a2)][c/(a_1a_2)][c/(a1a2)]+1[c/(a_1a_2)]+1。当 c=a1a2a1a2c=a_1a_2-a_1-a_2 时,不定方程没有非负解。

该定理曾经出现在 NOIP2017 的赛场上。

题目链接

P3951 [NOIP2017 提高组] 小凯的疑惑

题目大意

小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。

在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。

现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?

注意:输入数据保证存在小凯无法准确支付的商品。

代码

#include <iostream>
using namespace std;
int main()
{
    long long a,b;
    cin>>a>>b;
    cout<<a*b-a-b;
    return 0;
}

明天,我们将介绍该定理的详细证明和直观理解方式。