二元一次不定方程和最大公约数笔记

问题描述:

1)求满足ax+by=gcd(a,b)的x,y整数解。

2)形如ax+by=gcd(a,b)的二元一次不定方程有没有整数解

3)如果有解,如何求解

4)有多少个解,能否用一个公式来形式化描述所有解。

5)用计算机求解

求解22x+60y=gcd(22,60)=2;

首先利用欧几里得算法求解gcd(22,60)。如下

设a=60,b=22.

a=60=2*22+16;  移项: 16=a-2*22=a-2b;

b=22=1*16+6;   移项: 
6=b-16=b-(a-2b)=3b-a;

16=2*6+4;     
   移项:4=16-2*6=a-2b-2*(3b-a)=3a-8b;

6=1*4+2;   
      移项: 
2=6-1*4=3b-a-(3a-8b)=11b-4a;

4=2*2+0;

最终得到2=11b-4a=-4*60+11*20.因此x=11,y=-4。

将x=11,y=-4代回原方程,验证结果是否正确:11*22+60*(-4)=242-240=2。结果正确。

事实上,形如x=11+60k,y=-4-22k都是22x+60y的解。验证一下:

22*(11+60k)+60(-4-22k)=242+22*60k-242-60*22k=2。

因此,x=11+60k,y=-4-22k。确实是22x+60y=gcd(22,60)的解

接下来,很重要的一个问题就是,形如 x=11+60k,y=-4-22k的解是否涵盖22x+60y=2的所有解。

线性方程定理 :

  设a,b是一个非零整数,g=gcd(a,b)。方程ax+by=g.至少有一个解(x1,y1)。且其他解可由(x1+k*a/g,y1-k*b/g)得到。

算法描述

  Extended-euclid(a,b)

if b=0

return (a,1,0);

(d1,x1,y1)=extended-euclid(b,a mod b)

(d,x,y)=(d1,y1,x1-(a/b)y1)

return (d,x,y)

参考资料:

数论概论第6章

算法导论第31章

时间: 2024-10-05 12:24:44

二元一次不定方程和最大公约数笔记的相关文章

二元一次不定方程

定义: a,b,c是整数,且ab!=0,那么形如ax+by=c的方程称为二元一次不定方程 定理1: 设a,b是整数且 d = gcd(a,b) 如果d|c,那么返程存在无穷多个整数解,否则不存在整数解. 这里大概可以发现二元一次不定方程和同余方程可以相互转化,如在a>0且b>0的条件下,求二元一次方程ax+by=c整数解等价于求一元线性同余方程ax≡c(mod b)的整数解. 给出poj 2142这个题练练手 The Balance Time Limit: 5000MS   Memory Li

给自己定个小目标----读书笔记

自己常常有这种感觉:有时候老感觉时间过的太快,但是没做出什么东西,也没实现自己的目标,缺少目标. 很多时间自己不知道今年的目标是啥,也不知道该往哪个目标哪个方向去前进. 以下摘抄了我读的某书中的观点: 要认清方向,有以下几点: 充分发挥个人优势 接纳自己的弱点 坚持独特之处 追随兴趣所在 应该去做的事情: 坚持自己的兴趣爱好所在,并不断坚持锻炼乐在其中 生活最好有多方面的自己,让自己的生活更多样,更多彩,更多身份可以在不同的地方得到鼓励 坚持自己的独特之处 坚持让你追随下去的热情 关于目标 一年

[蒟蒻修炼计划][学习笔记]数论(一)

扩展欧几里得 求二元一次不定方程的一组解. 当时,有一组解 : 当时,因为 , 所以设满足, 则 , 整理得 . 所以. 就可以在求gcd的过程中得到一组解. inline int exgcd(int a,int b,int &x,int &y){ if(!b){ x=1;y=0;return a; } else{ int ret=exgcd(b,a%b,y,x); y-=a/b*x;return ret; } } 欧拉函数 欧拉函数的定义:小于等于的正整数中与互质的数的个数. 当时,:

【数学】解方程

简而言之,本题任务就是解方程.共有两个子任务. 子任务 1:小学生 作为小学生,我们只会解一元一次方程,一元一次方程最终都可以化为 ax=n 的形式.现在问:对于给定的 n,要使得 x 有正整数解,总共可以取多少个不同的 a 呢? 子任务 2:中学生 作为中学生,我们只会解二元一次不定方程,二元一次不定方程最终都可以化为 ax+by=n 的形式.现在问:对于给定的 n,要使得 x,y 有正整数解,总共可以取多少对不同的 (a,b) 呢? Input 输出一行两个整数 q,n (q∈{1,2}).

组合数取模(转载)

本文转自:http://blog.csdn.net/skywalkert/article/details/52553048 0. 写在前面 在程序设计中,可能会碰到多种类型的计数问题,其中不少涉及到组合数的计算,所以笔者写下这么一篇文章,期望能解决一些常规的组合数求模问题.以下部分内容改编自AekdyCoin的<组合数求模>,而且为了感谢他对(懵懂的)笔者的启发,这篇文章的标题与其文章相同.另外,感谢Picks将多项式运算的技巧在中国进行推广,感谢51nod提供了许多有趣的数论题目,感谢fot

转:转一个搞ACM需要的掌握的算法. .

要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来.  适合自己的才是好的,有的人不适合搞算法,喜欢系统架构,因此不要看到别人什么就眼红,  发挥自己的长处,这才是重要的. 第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,  因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打  出来.  1.最短路(Floyd.Dijstra,BellmanFord)  2.最小生成树(先写个prim,kruscal要用并查集,不好写)

算法初学者指南

摘自网络,对于这个训练计划,我只能膜拜,~ 第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15 分钟内打完,甚至关掉显示器都可以把程序打 出来. 1.最短路(Floyd.Dijstra,BellmanFord) 2. 最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码可在五行以内) 5.叉乘.判线段相交.然后写个凸包. 6.BFS.DFS,同时熟练hash表(

第四届蓝桥杯 c/c++真题

第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天.这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日. 在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日. 高斯获得博士学位的那天日记上标着:

ACM知识点清单

本文直接来源http://blog.csdn.net/xuanandting/article/details/52160859,如有侵权,请联系删除. 训练过ACM等程序设计竞赛的人在算法上有较大的优势,这就说明当你编程能力提高之后,主要时间是花在思考算法上,不是花在写程序与debug上. 下面给个计划你练练: 第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来. 1.最短路(Fl