一、引言

扩欧在朴素欧几里得定理中扩展得到,主要用于解决什么问题?
1.求两个数的最大公约数(朴素欧也可以解决这个问题)
2.ax+by=gcd(a,b),求解这个线性不定方程的一组特解。
(补充:贝祖定理:裴蜀定理(或贝祖定理)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。
它的一个重要推论是:a,b互质的充分必要条件是存在整数x,y使ax+by=1.)

二、关于exgcd的理解

1.代码递归的理解

2.细节的理解
注意ax+by=gcd(a,b)中,a、b要大于0
b如果小于0也这样处理,即,不管a,b符号符合,最后都变成
|a|x+|b|y=gcd(|a|,|b|)

三、代码

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

四、求解模线性方程

ax≡c (mod b)
充要条件:
ax-by=c
于是我们就发现是线性不定方程的形式啦,就可以用扩欧求解

下面还会讲逆元,也是这个思想!

五、例题

青蛙的约会
AC:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ll long long
#define INF 0x3f3f3f3f
#define EPS 1E-10using namespace std;ll x,y,m,n,L;
void   gcd(ll a,ll b,ll &d,ll &x,ll  &y)
{if(b==0){d=a;   x=1;    y=0;}else{gcd(b,a%b,d,y,x);    y-=x*(a/b);}
}
void  solve()
{ll t,s;ll g;if(n<m){swap(n,m);swap(x,y);}gcd(n-m,L,g,t,s);if((x-y)%g!=0){printf("Impossible\n");return ;}t*=(x-y)/g;ll tmp=(L/g);cout<<(t%tmp+tmp)%tmp<<endl;  return ;
}
int main()
{cin>>x>>y>>m>>n>>L;solve();return 0;
}

数论基础(1)扩展欧几里得定理相关推荐

  1. 专题·扩展欧几里得定理【including 求解二元一次方程,线性同余方程

    初见安~这里是基础数论专题(3)~[详见数论专栏] p.s:本文章假设你已经掌握了欧几里得算法--辗转相除法求最大公约数(gcd) 一.二元一次方程 形如的含有两个未知数且最高次数为1的方程我们称之为 ...

  2. 欧几里得定理与扩展欧几里得定理

    欧几里的定理(辗转相除法): gcd(a,b) = gcd(b,a%b) gcd(a,b)表示a,b的最大公约数 证明: 设 a > b c = a%b a = k * b + c (k为某个整 ...

  3. 数学基础知识(扩展欧几里得定理)

    一.欧几里得定理(辗转相除法) 性质:如果 i 能整除a,也能整除b,则 i 能整除a+b,也能整除ax+by(x,y为整数),同时a mod b = a-(a/b)*b 用以上的性质我们知道如果一个 ...

  4. 扩展欧几里得定理求ax + by = c 的通解

    扩展欧几里得定理求ax + by = c 的通解: 前置条件: ax + by = c , gcd(a, b) = d 计算: a d \frac{a}{d} da​x + b d \frac{b}{ ...

  5. 扩展欧几里得定理详解和运用(就不信你看不懂!)

    1 :扩展欧几里得内容: 扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+by =c.(若 c%gcd(a,b)!=0)则无解 所以 我们求ax+by=c是不是可以转化为求 ax+by=k ...

  6. 扩展欧几里得定理的证明和代码

    1.欧几里得算法,gcd(a,b)为a b(a>b)的最大公约数,则gcd(a,b) = acd(b, a%b) 利用这个定理我们可以反复对ab模下去求得a和b的最大公约数 代码如下 int G ...

  7. 浅谈扩展欧几里得定理(附裴蜀定理)

    关于扩展欧几里得定理 众所周知,扩展欧几里得定理是用来求形如(a,b,c皆为整数)这样的方程的一组解[注,仅是一组解]的定理 它的原理比较复杂,本人学了挺久才懂了一点,这里就不谈了,扩欧的核心是它的思 ...

  8. 【数论初步学习】扩展欧几里得定理

    本章节不以理解算法为目的,更注重于使用. 首先需要了解扩展欧几里得的算法 ---找出一对(x,y),使得其能满足ax+by=gcd(a,b)这一式子. 下面给出实现此算法的代码 void gcd(in ...

  9. 扩展欧几里得定理基础讲解 代码及证明

    知识储备 1 . 朴素欧几里得原理:gcd(a,b) == gcd(b,a % b) 2 . 负数取模:忽略符号返回绝对值就好了 3 . 模数原理:对于整数a,b必然存在整数k使得a % b == a ...

最新文章

  1. PHP特级课视频教程_第二十八集 PHP搜索代码测试_李强强
  2. .net 下直接读分区数据,并生成ISO光盘镜像文件,含DEMO
  3. CDH使用秘籍(一):Cloudera Manager和Managed Service的数据库
  4. 主题简介 ASP .NET
  5. python 和C语言 中的一些容易混淆的符号整理
  6. Python+OpenCV:训练级联分类器(Cascade Classifier Training)
  7. python + Eclipse + Pydev 安装
  8. AWS亚马逊ssh登录失败 Permissions 0644 for .pem are too open
  9. 郭天祥 新概念51单片机C语言教程.入门、提高、开发.pdf下载地址
  10. 图像处理黑科技—破解文档识别难题(PS检测、弯曲拉平、切边切片、摩尔纹)
  11. VXLAN技术产生背景
  12. 第一章 FreeSWITCH 的架构
  13. 安徽省对口计算机试题答案,安徽省对口高考试卷
  14. 微信抢红包算法实现(JAVA)
  15. 关于tink的碰撞检测类【2】
  16. 自动化测试 appium 会报错 Could not proxy command to remote server. Original error: Error: socket hang up
  17. VLC Media Player
  18. 2018年GIS学术年会总结
  19. MapReduce编程入门-日志访问次数统计任务
  20. 蝉知 路径index.php,宝塔面板下蝉知cms nginx环境下完美伪静态的解决办法

热门文章

  1. 每日一练-第一天-3.18
  2. 6-1 图书列表 (25 分)
  3. QCustomPlot之K线图(十七)
  4. EVE-NG裸机安装
  5. 导入大量数据,比如300G数据,导出500G数据需要考虑的问题
  6. klee 检测漏洞-四个实例
  7. 8位小数mysql_纬度/经度(小数点后8位)应使用哪种MySQL数据类型?
  8. 颠覆传统考勤 刷脸打卡更省心
  9. 使用CSS将多余文字显示成省略号
  10. OpenStack Pike版本+KVM+Passthrough+NVIDIA显卡1060透传