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

欧几里得算法

注:欧几里得算法是用来计算最大公约数的一个算法.主要的代码实现如下:

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(a,b) = gcd(b,a%b)成立的话,

我们要证明g|b,g|a%b

因为g|b

所以我们要证明a%b

∵a%b = a−b * ⌊n/m⌋

∴g|a%b

裴蜀定理:

定义:对于不定方程:a*x + b*y = c,判断此不定方程有整数解的条件是gcd(a,b)|c

如何证明?

证明过程:

对于gcd(a,b)?c时,

显然gcd(a,b) | (a*x + b*y)如果存在整数解的话,gcd(a,b)|c

gcd(a,b)?dgcd(a,b)?d 这个线性方程不存在整数解。

扩展欧几里得算法(简称扩欧):

扩欧就是用来求a*x+b*y=gcd(a,b)的一组整数解的算法

原理:

当b = 0时

x = 1,y = 0是方程a*x+b*y=gcd(a,b)的一组解.

当b ≠ 0时

a*x1+b*y1 = a*y2+b*(x2-a/b*y2)

证明过程:

a*x1 + b*y1 = gcd(a,b)

b*x2+(a%b)*y2 = gcd(b,a%b)

∵gcd(a,b) = gcd(b,a%b)

∴a*x1 + b*y1 = b*x2+(a%b)*y2

       =b*x2+(a - [a/b]*b)*y2

       =b*x2+a*y2-[a/b]*b*y2

       =a*y2 + b(x2 - [a/b]*y2)

∴x1 = y2,y1 = x2 - [a/b]*y2

代码如下:

int exgcd(int a,int b,int &x,int &y){
    if(b == 0){
        x = 1,y = 0;
        return a;
    }
    int g = exgcd(b,a%b,x,y);
    int t = x;
    x = y;
    y = t - a/b * y;
    return g;
}

最后的x,y就是二元一次不定方程的一组解

原文地址:https://www.cnblogs.com/tpgzy/p/9084816.html

时间: 2024-10-12 02:35:18

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

扩展欧几里得算法、裴蜀定理与乘法逆元

扩展欧几里得算法 扩展欧几里得算法(扩O)能在求gcd(a,b)的同时求出丢番图方程ax+by=gcd(a, b)的解. 然而怎么求呢?我们观察gcd(a, b)=gcd(b, a%b),所以设如下两个方程: ax+by = gcd(a,b) = d: bx'+(a%b)y' = gcd(b,a%b): 明显gcd(a,b) = gcd(b,a%b),也就是ax+by = bx'+(a%b)y'. 为了求得x与y,我们需要保证a,b不变,所以:ax+by = bx'+(a%b)y' = bx'+

【bzoj1441】Min 扩展裴蜀定理

题目描述 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 输入 第一行给出数字N,代表有N个数 下面一行给出N个数 输出 S的最小值 样例输入 2 4059 -1782 样例输出 99 题解 扩展裴蜀定理 裴蜀定理:二元一次不定方程 $ax+by=c$ 存在整数解的充分必要条件是 $\gcd(a,b)|c$. 扩展裴蜀定理:改成n元一次不定方程,结论依然成立. 证明: $a_1x_1+a_2x_2$ 的取值范围为 $k·\gc

Wannafly挑战赛22 A-计数器(gcd,裴蜀定理)

原题地址 题目描述 有一个计数器,计数器的初始值为0,每次操作你可以把计数器的值加上a1,a2,...,an中的任意一个整数,操作次数不限(可以为0次),问计数器的值对m取模后有几种可能. 输入描述: 第一行两个整数n,m接下来一行n个整数表示a1,a2,...,an1≤n≤1001≤m,a1,a2,...,an≤1000000000 输出描述: 输出一个整数表示答案 示例1 输入 复制 3 6 6 4 8 输出 复制 3 题解:假设K1为A1取的个数:根据题意题目变成a1*k1+a2*k2+a

BZOJ 2299 向量(裴蜀定理)

题意:给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y). 实际上前四个向量能拼出(ma,nb)(m%2=n%2).后四个向量拼出(xb,ya)(x%2=y%2). 这样可以枚举这四个未知数在模二意义下的解.这两个向量相加为(ma+xb,nb+ya). 对于ma+xb=X.根据系数的奇偶性,如果有系数为奇数,可使得等式两边都减去一个数使得系数都为偶

贝祖定理(裴蜀定理)

在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理:若a,b是整数,且(a,b)=d,那么对于任意的整数x,y,ax+by=m中的m一定是d的倍数. 特别地,一定存在整数x,y,使ax+by=d成立,且不止一组,例如(12,42)=6,则方程12x + 42y = 6有解,事实上有(-3)×12 + 1×42 = 6及4×12 + (-1)×42 = 6. 而ax+by=1是a,b两数互质的充要条件,同样地,x,y不止一组. 参考:http://www.cnblogs.com/tekk

【BZOJ-2299】向量 裴蜀定理 + 最大公约数

2299: [HAOI2011]向量 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1118  Solved: 488[Submit][Status][Discuss] Description 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y). 说明:这里的拼就是使得你选出的向量之和为(x,y)

【BZOJ-1441】Min 裴蜀定理 + 最大公约数

1441: Min Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 471  Solved: 314[Submit][Status][Discuss] Description 给出n个数(A1...An)现求一组整数序列(X1...Xn)使得S=A1*X1+...An*Xn>0,且S的值最小 Input 第一行给出数字N,代表有N个数下面一行给出N个数 Output S的最小值 Sample Input 24059 -1782 Sample Outpu

bzoj 2299 [HAOI2011]向量 裴蜀定理

bzoj 2299 [HAOI2011]向量 裴蜀定理 题意: 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个向量(x,y). 限制: -2*1e9 <= a,b,x,y <= 2*1e9 思路: 题目的操作可以化为: 1. x +- 2a; 2. y +- 2a; 3. x +- 2b; 4. y +- 2b; 5. x + a && y

BZOJ 2257: [Jsoi2009]瓶子和燃料【数论:裴蜀定理】

2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1326  Solved: 815[Submit][Status][Discuss] Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1<=N<=1000) ,经过协商,火星人只要其中的K 个 . jyy 将 K个瓶子交给