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

例:
(1)方程18x + 3y = 7没有整数解,因为gcd(18,3) = 3,3不能整除7;

(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, 0x,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的通解

【蓝桥杯】简单数论4——丢番图方程相关推荐

  1. 蓝桥杯---简单的计算器

    蓝桥杯---简单的计算器 题目: 问题描述 编程模拟计算器的加.减.乘.除功能,根据用户输入的运算符,对两个数进行运算.(要求switch语句) 输入格式 输入只有一行,用空格隔开的运算符和两个运算数 ...

  2. 蓝桥杯简单题之十六进制转八进制(JAVA版)

    首先对等待程序猿成长之路系列的小伙伴们说声抱歉,春节来临,可能要拖更一段时间,但是草稿已经在写,发布将会于春节后进行发布 春节第一天闲着无聊打算找个蓝桥杯的题目练练手,诶嘿,这就找到一题,话不多说,上 ...

  3. 【蓝桥杯】计算指定日期为当年第几天

    文章目录 前言 题目 分析 算法 难度 实战 1.创建算法 2.创建测试用例 3.测试结果 总结 前言 蓝桥杯全国软件和信息技术专业人才大赛由工业和信息化部人才交流中心主办,每年参赛人数超过30000 ...

  4. 2019第十届蓝桥杯省赛C/C++B组题解

    作为很久很久没有写过算法题的考研狗 OvO(是这样的,卑微考研),我于今年再次参加了蓝桥杯... 大家都说这次蓝桥杯简单,我也是这么觉得的(或者说是我运气好),或者说是考细节吧(虽然我也没怎么考虑细节 ...

  5. 蓝桥杯历年真题,来,看看

    .标题: 世纪末的星期 曾有邪教称1999年12月31日是世界末日.当然该谣言已经不攻自破. 还有人称今后的某个世纪末的12月31日,如果是星期一则会.... 有趣的是,任何一个世纪末的年份的12月3 ...

  6. 【蓝桥杯】简单数论1——GCDLCM

    GCD 最大公约数Greatest Common Divisor(GCD):整数a和b的GCD是指能同时整除a和b的最大整数,记为gcd(a,b).由于-a的因子和a的因子相同,因此gcd(a, b) ...

  7. AcWing蓝桥杯AB组辅导课08、数论

    文章目录 前言 一.数论 例题 例题1:AcWing 1246. 等差数列(最大公约数,第十届蓝桥杯省赛C++B第7题) 分析 题解:最大公约数 例题2:AcWing 1295. X的因子链(算数基本 ...

  8. [蓝桥杯][2013年第四届真题]买不到的数目-模拟,数论

    题目描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两种包装来组合.当然有些糖果数目是无法组合出来的,比如要买 10 颗糖. ...

  9. 蓝桥杯ACM简单题-生日蜡烛 2020-12-22

    蓝桥杯ACM简单题-生日蜡烛 1.问题描述 某人从某年开始每年都举办一次生日派对,并且每次都要吹熄与年龄相同根数的蜡烛.现在算起来,他一共吹熄了236根蜡烛.请问,他从多少岁开始过生日派对的? 2.算 ...

最新文章

  1. seo优化无法避免却又无可奈何的问题
  2. Android系统全貌 (转)
  3. Java中的对象序列化操作
  4. IT趣闻:世界知名IT公司名字由来
  5. powerdesigner导出sql时自动生成注释
  6. IntelliJ IDEA for Mac 如何在当前的普通Java项目中创建新的模块/添加模块/创建模块
  7. python+PIL+pytesser处理验证码环境搭建
  8. koa2 导出excel表格设置样式_一调整Excel表格的行列宽度,图片又得重新调整?点这个设置就行...
  9. 腾讯云短信服务在项目中的使用
  10. 一个网站查遍所有英文文章 “会议地点及出版商”(亲测搜了80篇全部有效)
  11. Michael喜欢滑雪百这并不奇怪(记忆化搜索)
  12. 华为云桌面,一站式云上数字化创作深度解读
  13. 运行shell脚本时怎么知道jdk路径_linux查看java jdk安装路径和设置环境变量 – HouYing – 博客频道 – CSDN.NET...
  14. VL53L0测距芯片试用【ST主题月】
  15. HTML“计算机输出”标签 codekbdsampttvarpre
  16. Android10的GPU呈现模式分析在哪?
  17. 无线通信中的小尺度衰落
  18. 魔兽怀旧服一个服务器最多人数,魔兽怀旧服:比灰烬排队人数还多的服务器,仅此一个,过于平衡!...
  19. spring-注解实现自动装配
  20. centos7搭建owncloud私有云

热门文章

  1. 您的浏览器暂不支持计算机上传文件的大小,电脑中谷歌浏览器无法上传图片的解决方法...
  2. FP、FN、TP、TN、精确率(Precision)、召回率(Recall)、准确率(Accuracy)是什么意思
  3. catflag Crypto KeyBoard
  4. matlab sisotool工具DEMO
  5. 小林coding 的笔记——图解网络(一)
  6. 微信小程序的灰度发布
  7. nginx正则表达式快捷测试方法
  8. three.js创建简单的法向贴图
  9. Nim 游戏和 SG 函数
  10. Salesforce触发器面试题