线性方程定理

设a与b是非零整数,g=gcd(a,b).方程ax+by=g总是有一个整数解(x1,y1)  (可利用扩展欧几里得算法解出),则方程的每一个解可由(x1+k*b/g,y1-k*a/g)得到,其中k可为任意整数。

证明:先证明ax+by=1的情况(此时设gcd(a,b)=1)。   (1)

若(x,y)是(1)式的解,则(x+kb,y-ka)也是(1)式的解,这个显而易见。

当然,若(x1,y1)和(x2,y2)都是(1)式的解,那么

ax1+by1=1  (2)

ax2+by2=1  (3)

通过x2乘(2)式减去x1乘(3)式,可得  by1*x2-by2*x1=x2-x1    (4)

通过y2乘(2)式减去y1乘(3)式,可得  ax1*y2-ax2*y1=y2-y1    (5)

不妨令k=x2*y1-x1*y2,代入(4)、(5)式

推出  x2=x1+kb,y2=y1-ak

似乎这都是理所当然的做法

再讨论ax+by=gcd(a,b)时只需等式两边都除一下gcd(a,b)即可

时间: 2024-10-15 23:12:06

线性方程定理的相关文章

poj_2115C Looooops(求逆元)

题目链接:http://poj.org/problem?id=2115 C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22912   Accepted: 6293 Description A Compiler Mystery: We are given a C-language style for loop of type for (variable = A; variable != B; vari

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

问题描述: 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

欧几里得定理及扩展

我们都知道欧几里得算法是用来快速求两个数的最大公约数的算法,效率较高:2O(logn).   我们先给出算法的实现: 1 int gcd_1(int a, int b) 2 { 3 if(b==0) return a; 4 return gcd_1(b, a%b); 5 } 6 7 int gcd_2(int a, int b) 8 { 9 while(b) 10 { 11 int r = a%b; 12 a = b; 13 b = r; 14 } 15 return a; 16 } 要证明上述

POJ 2115 模线性方程 ax=b(mod n)

/* (x*c+a)%(2^k)==b →(x*c)%(2^k)==b-a 满足定理: 推论1:方程ax=b(mod n)对于未知量x有解,当且仅当gcd(a,n) | b. 推论2:方程ax=b(mod n)或者对模n有d个不同的解,其中d=gcd(a,n),或者无解. 定理1:设d=gcd(a,n),假定对整数x和y满足d=ax+by(比如用扩展Euclid算法求出的一组解). 如果d | b,则方程ax=b(mod n)有一个解x0满足x0=x*(b/d) mod n .特别的设e=x0+

【学习总结】数学-欧几里德定理

描述 欧几里德算法 别名:辗转相除法 用途:计算两个正整数a,b的最大公约数 欧几里德拓展算法 扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足等式: ax+by=gcd(a,b)=d(解一定存在,根据数论中的相关定理).扩展欧几里德常用在求解模线性方程及方程组中. 代码 C++ 欧几里德 LL gcd (LL a, LL b) { return b ? gcd(b, a%b) : b; } C++ 拓展欧几里德 void exgcd (LL a, LL b, LL& d, LL&a

扩展欧几里得定理总结

拓展欧几里得定理主要用来求解同余线性方程,求逆元等,遇到题目给出形如ax+by==c,要求一组满足要求的x和y时,可以联系扩展欧几里得求解 拓展欧几里得由 gcd(a,b) = gcd(b,a%b) 推出 由于 a*x + b*y == gcd(a,b) 必定有解 所以 b*x + (a%b)*y == gcd(b,a%b) 最终得到ax+by==a*y1+b*(x1-(a/b)*y1) 当x0 y0 是方程的一组解,可以得到所有解的形式满足 x=x0+b/d*t y=y0-a/d*t 当 题目

关于欧几里得算法,裴蜀定理,扩展欧几里得算法证明与解析

欧几里得算法 注:欧几里得算法是用来计算最大公约数的一个算法.主要的代码实现如下: int gcd(int a,int b){ return !b?a:gcd(b,a%b); } 如果这个式子成立的话,不断重复利用这个式子来计算,直到a和b中有一个数变为 0的时候,就可以求出了他们的最大公约数. 举个例子:我们要求gcd(15,30) 运行如下:gcd(15,30)=gcd(30,15)=gcd(15,0)此时的15便是gcd(15,30) 证明过程: 设g = gcd(a,b), 若使gcd(

29-中国剩余定理CRT

https://blog.csdn.net/u010468553/article/details/38346195 中国剩余定理[数论] 2014年08月02日 12:55:59 阅读数:2351 中国剩余定理的具体描述是这样的: 给出你n个ai和mi,最后让求出x的最小值是多少. 中国剩余定理说明:假设整数m1, m2, ... , mn两两互质,则对任意的整数:a1, a2, ... , an,方程组有解,并且通解可以用如下方式构造得到: 设是整数m1, m2, ... , mn的乘积,并设

基本数论定理

算术基本定理 标签(空格分隔): 数论 证明 定理内容: 对于每一个整数\(n\ge2\),可唯一分解乘素数乘积 \(n = p_1*p_2..p_n\) 证明也是比较有意思的. 如无特殊说明,本文的p都是素数 首先证明: 如果\(p\mid a_1 * a_2\),则\(p\)必定整除其中一个.(此时我们没有学会算术基本定理,所以证明并不显然) 如果\(p\mid a_1\),那么证明结束. 如果\(p\nmid a_1\) 那么就有线性方程: \(p*x+a_1*y = 1\) 随意一组解\