1、二元线性丢番图方程
方程ax +by = c被称为二元线性丢番图方程,其中a、b、c是已知整数,x、y是变量,问是否有整数解。
ax + by= c实际上是二维x-y平面上的一条直线,这条直线上如果有整数坐标点,方程就有解,如果没有整数坐标点,就无解。
讯享网
如果存在一个解,就有无穷多个解。
1.1有解的判断条件和通解的形式
定理:设a,b是整数且gcd(a, b)=d。如果d不能整除c,那么方程ax + by=c没有整数解,如果d能整除c,那么存在无穷多个整数解。
解释:令a=da',b= db';有ax+by = d(a' x +b'y)=c;如果x、y、a'、b'都是整数,那么c必须是d =gcd(a, b)的倍数,才有整数解。
如果
是方程的一个特解,所有的解(通解)可的形式:x=
+(b/d)n,y=
- (a/d)n,其中n是任意整数。

说明: x值按b/d递增,y值按- a/d递增。设
是一个格点(格点是指x、y坐标均为整数的点),移动到直线上另一个点
,有
。△x和Ay必须是整数,
才是另一个格点。
最小是多少?因为a/d与b/d互素,只有
= b/d,
=- a/d时,
和
才是整数,并满足a
+b
= 0。
定理概况为: ax + by= c有解的充分必要条件是d = gcd(a, b)能整除c。
(2)方程25x + 15y = 70存在无穷个解,因为gcd(25,15)= 5且5整除70,一个特解是
=4,
= -2,通解是x=4 + 3n,y = -2- 5n
1.2例题一:线段上的格点数量
【题目描述】在二维平面上,给定两个格点
和
,问线段
上除了
外还有几个格点?设
。
【思路】
首先利用
把线段表示为方程ax + by = c的形式,它肯定有整数解。
然后在线段范围内,根据x的通解的表达式
,当
时,求出n的取值情况有多少个,这就是线段内的格点数量。

计算步骤:
(1)、用
、
表示线段,线段表示为:

(2)、对照ax + by = c,得:

(3)、对照通解公式
n,令特解是x,代入限制条件
,有:
当-d < n< 0时满足上面的表达式,此时n有d-1种取值,即线段内有d-1个格点。
2、方程的特解与扩展欧几里得算法
求解方程ax + by = c的关键是找到一个特解。
根据定理的描述,解和求GCD有关;
求特解用到了欧几里得求GCD的思路,称为扩展欧几里得算法。
2.1扩展欧几里得算法
方程ax + by = gcd(a, b),根据定理,它有整数解
定理:设a, b是整数且gcd(a, b)=d。如果d不能整除c,那么方程ax + by=c没有整数解,如果d能整除c,那么存在无穷多个整数解。
扩展欧几里得算法求一个特解
的代码:
def exgcd(a,b): if b == 0:return 1, 0 x,y = exgcd(b,a % b) return y, x - a // b * y # 返回特解xo,yo a,b = map (int,input ().split())# 试试6x+15y=3 x,y = exgcd (a,b)#计算得到特解 print(x, y)
讯享网
2.2扩展欧几里得算法与方程ax+by=c的特解
用扩展欧几里得算法得到ax +by =ged(a,b)的一个特解后,再利用它求方程ax +by= c的一个特解。步骤如下:
(1)判断方程ax +by = c是否有整数解,即gcd(a,b)能整除c。记d= gcd(a,b)。
(2)用扩展欧几里得算法求ax + by = d的一个特解
(3)在
两边同时乘以c/d,得:
(目的是构造c,这样和ax + by= d就能消掉c)
(4)对照ax +by =c,得到它的一个解
是:
(5)方程ax + by = c的通解:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/25569.html