斐蜀定理

内容

斐蜀定理又叫贝祖定理,它的内容是这样的:

若$a,bin N$,那么对于任意x,y,方程$ax+by=gcd(a,b)*k(kin N)$一定有解,且一定有一组解使$ax+by=gcd(a,b)$

推论

a,b互素的充要条件是方程$ax+by=1$有整数解。

证明

令$d=gcd(a,b)$,则$d|a,d|b$

那么就能得到$d|(ax+by)$

于是我们设s为$ax+by$能得到的最小正整数值,则$d|s$。

令$q=adiv s$(此处为整除),$r=amod s$,则$a=qs+r$。

->$r=a-qs$

->$r=a-q(ax+by)$

->$r=(1-qx)a+b(-qy)$

则通过观察可以发现r也是一个关于a,b的线性组合,其中$x=(1-qx),y=(-qy)$

因为$0leq r< s$,又因为s是a,b线性组合所能得到的最小自然数,那么r既然比s小,r只能等于0.

所以既然余数为0就说明$s|a$,同理可证明$s|b$,所以能得到$s|(ax+by)$。

于是就有$s|d$,又因为上文提到了$d|s$,所以得到$s==d$

由于s是$ax+by$所得到任意值的集合中的最小者,又因为s=d,d=gcd(a,b)所以得到

$ax+by=gcd(a,b)$

证明完毕

拓展欧几里得算法

内容

所谓拓展欧几里得算法,那一定是跟欧几里得算法有一定关系的,拓展欧几里得算法所研究的问题是,讨论如何求满足斐蜀定理的一组方程的解。

方法

下面直接给出代码

1
2
3
4
5
6
7
8
9
大专栏  数论入门——斐蜀定理与拓展欧几里得算法"line">10
11
12
13
14
15
16
17
18
///解整数方程:ax+by=gcd(a,b);
void exgcd(ll a,ll b,ll& inv,ll& x,ll& y)
{
if(b)
{
exgcd(b,a%b,inv,x,y);
ll temp=x;
x=y;
y=temp-a/b*y;
}
else
{
inv=a;
x=1;
y=0;
}
}

证明

假设a>b:

Ⅰ.当b=0时,gcd(a,b)=a,于是方程就变成了$ax=gcd(a,b)=a$,易知x=1,那么当x=1,y=0,时就得到了方程的一组解。

Ⅱ.设两方程:

$ax_1+by_1=gcd(a,b)$

$bx_2+(amod b)y_x=gcd(b,amod b)$

有欧几里得算法得$gcd(a,b)=gcd(b,amod b)$ 于是得到:

$ax_1+by_1=bx_2+(amod b)y_2$.

其中$amod b=a-adiv btimes b$(此处为整除),带入原式得到:

$ax_1+by_1=bx_2+ay_2-adiv btimes y_2times b$

通过移项得到:

$ax_1+by_1=ay_2+b(x_2-adiv btimes y_2)$

则可以得到:

$x_1=y_2,y_1=(x_2-adiv btimes y_2)$

于是就得到了x,y的递推关系,求接的过程是递归的,从最后一个解$x=1,y=0$,就能推导到第一个式子的一个解。证毕。

参考链接

Ⅰ.EXGCD证明

数论入门——斐蜀定理与拓展欧几里得算法的更多相关文章

  1. ACM数论-欧几里得与拓展欧几里得算法

    欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). ...

  2. gcd&&exgcd&&斐蜀定理

    gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } re ...

  3. POJ 1061 青蛙的约会(拓展欧几里得算法求解模线性方程组详解)

    题目链接: BZOJ: https://www.lydsy.com/JudgeOnline/problem.php?id=1477 POJ: https://cn.vjudge.net/problem ...

  4. POJ 1601 拓展欧几里得算法

    学习链接:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 先来学习一下什么是欧几里得算法: 欧几里得原理是:两个整数 ...

  5. 欧几里得算法(gcd) 裴蜀定理 拓展欧几里得算法(exgcd)

    欧几里得算法 又称辗转相除法 迭代求两数 gcd 的做法 由 (a,b) = (a,ka+b) 的性质:gcd(a,b) = gcd(b,a mod b) int gcd(int a,int b){ ...

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

    2257: [Jsoi2009]瓶子和燃料 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1326  Solved: 815[Submit][Stat ...

  7. 欧几里得 &amp; 拓展欧几里得算法 解说 (Euclid &amp; Extend- Euclid Algorithm)

    欧几里得& 拓展欧几里得(Euclid & Extend-Euclid) 欧几里得算法(Euclid) 背景: 欧几里德算法又称辗转相除法.用于计算两个正整数a.b的最大公约数. -- ...

  8. hdu 1576 A/B 拓展欧几里得算法

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. lame定理求欧几里得算法的求余和赋值次数

    根据lame定理,根据欧几里得算法求(a,b)的最大公因数过程如下(假设a>b):

随机推荐

  1. 记录 TypeError: render() got an unexpected keyword argument 'renderer' 错误

    在网上看到MXShop这个项目,适合Python, Django + drf 进阶的,其中遇到 TypeError: render() got an unexpected keyword argume ...

  2. UVA 11584 入门DP

    一开始把它当成暴力来做了,即,从终点开始,枚举其最长的回文串,一旦是最长的,马上就ans++,再计算另外的部分...结果WA了 事实证明就是一个简单DP,算出两个两个点组成的线段是否为回文,再用LCS ...

  3. java AES加解密

    AES加解密工具类 package com.yan.demo; import org.apache.commons.lang3.StringUtils; import sun.misc.BASE64D ...

  4. MacOS常用快捷键

    command+空格 打开Spotlight command+m 最小化当前窗口 control+command+f     最大化当前窗口 command+q                    ...

  5. 当初对"软件工程"这个专业的期待和想象是什么?

    很多期待,很多幻想 印象很深刻的初中语文老师让我们背诵的一首诗<错误>: <错误> 作 者:郑愁予 我打江南走过 那等在季节里的容颜如莲花的开落 东风不来,三月的柳絮不飞 你底 ...

  6. 系统学习python第五天学习笔记

    1.列表补充 extend() li = ["alex", "WuSir", "ritian", "barry", &q ...

  7. Java机器学习软件介绍

    Java机器学习软件介绍 编写程序是最好的学习机器学习的方法.你可以从头开始编写算法,但是如果你要取得更多的进展,建议你采用现有的开源库.在这篇文章中你会发现有关Java中机器学习的主要平台和开放源码 ...

  8. Cover letter|review|Discussion

    选择期刊考虑影响因子和载文量(流量) 分类:多学科eg:CNS 专业综合:eg:nature子刊:lancet:cell,jacs 细分:eg:CA-A 投完Cover letter后,根据审稿结果修 ...

  9. GCC与gcc,g++区别

    看的Linux公社的一篇文章,觉得不错,内容复制过来了. 其实在这之前,我一直以为gcc和g++是一个东西,只是有两个不同的名字而已,今天在linux下编译一个c代码时出现了错误才找了一下gcc和g+ ...

  10. UVa202

    刚刚开始写的适合感觉是转换成字符然后开始遍历一遍,后面发现各种不行,就回去看了看题目,重新构思,写了好久还是WA,最后只能看下大神的操作(我太菜了). 先简单梳理下题目意思:首先给出两个数,然后这两个 ...