数论基础——扩展欧几里得算法(模板)
文章目录
- 数论基础——扩展欧几里得算法(模板)
- 欧几里得算法
- 原理
- 代码
- 扩展欧几里得算法
- 原理
- 代码
- 应用
数论基础——扩展欧几里得算法(模板)
欧几里得算法
原理
设gcd(a,b)是计算自然数a和b得最大公约数得函数,令a=b×p+q(a>b)a=b\times p+q(a>b)a=b×p+q(a>b)
则gcd(b,q)既整除a又整除b,也就是整除gcd(a,b)。
反之,因为q=a−b×pq=a-b\times pq=a−b×p,同理得gcd(a,b)整除gcd(b,q)。
因此可得:gcd(a,b)=gcd(b,a%b)gcd(a,b)=gcd(b,a\%b)gcd(a,b)=gcd(b,a%b)
反复操作,最终得到gcd(a,b)=gcd(c,0)=cgcd(a,b)=gcd(c,0)=cgcd(a,b)=gcd(c,0)=c
注:实际上就是辗转相除法。
代码
typedef long long LL;
LL gcd(LL x,LL y)
{return y ? gcd(y,x%y) : x;
}LL lcm(LL x,LL y)
{return x*y/gcd(x,y);
}
扩展欧几里得算法
原理
1.设
int exgcd(int a,int b,int &x, int &y)
是求解方程a∗x+b∗y=gcd(a,b)a*x+b*y=gcd(a,b)a∗x+b∗y=gcd(a,b)的函数它的返回值是gcd(a,b)。
2.类比gcd函数,我们可以递归定义exgcd。
由gcd(a,b)=ax+by和gcd(b,a%b)=bx’+(a%b)y’
可得:ax+by=bx’+(a%b)y’
代入:a%b=a-(a/b)b
得:ax+by=bx’+(a%b)y’=bx’+(a-(a/b)b)y’=ay’+b(x’-(a/b)y’)
因此要求x,y只需要得到x’,y’
而当b=0时,a1+b0=gcd(a,b)(递归结束条件)
代码
int exgcd(int a,int b,int &x, int &y)
{int d=a;if(!b){x=1;y=0;return d;}d=exgcd(b,a%b,y,x);y-=(a/b)*x;}
应用
1.求解不定方程(实际上直接枚举也可以得到答案);
2.求解线性同余方程;
3.求解模的逆元;
数论基础——扩展欧几里得算法(模板)相关推荐
- 密码学基础算法(一)基于整数的欧几里得算法和扩展欧几里得算法
图片来源: 随便谷歌的一个图片 图片地址: https://jason-chen-1992.weebly.com/uploads/1/0/8/5/108557741/euclidean_3_orig. ...
- Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...
Codeforces 1106F Lunar New Year and a Recursive Sequence (数学.线性代数.线性递推.数论.BSGS.扩展欧几里得算法) 哎呀大水题..我写了一 ...
- 数论:欧几里得与扩展欧几里得算法
文章目录 欧几里得算法 历史发展 表示 证明 代码 例题 扩展欧几里得算法 表示 求解方法 代码 其他定理: 例题 欧几里得算法 历史发展 欧几里得算法用来求得两个数的最大公约数,大约公元前300年首 ...
- 欧几里得算法及其扩展欧几里得算法——数论
欧几里得算法(gcd): 又名辗转相除法,是求最大公约数的算法.辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数.两个数的最大公约数通常写成 gcd(a, b). ...
- 扩展欧几里得算法(exgcd)
前置知识 数论基本概念,欧几里得算法 裴蜀定理 在学习exgcd之前,我们需要先学习一下裴蜀定理. 裴蜀定理有两条: 对于任意的整数 a,ba,ba,b,存在一组整数 x,yx,yx,y,使得 ax+ ...
- 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...
难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...
- 扩展欧几里得算法、乘法逆元与中国剩余定理
文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...
- 欧几里得算法/扩展欧几里得算法
转载请说明出处:http://blog.csdn.net/leader_one/article/details/75222771 说在前面 出于尊重,简单介绍一下欧几里得(想了解更多自己百度去) 欧几 ...
- Python在GF(2⁸)有限域上求解多项式的乘法逆元——基于扩展欧几里得算法
文章目录 一.前言 二.数学基础 1.GF(2⁸)有限域内的多项式 2.不可约多项式 3.多项式模运算 3.乘法逆元 三.算法步骤 1.扩展欧几里得算法 2.多项式除法 3.多项式乘法 四.代码实现 ...
- 欧几里得与扩展欧几里得算法(含推导过程及代码)
文章目录 前言 一.欧几里得算法 二.扩展欧几里得算法 2.1.认识裴蜀定理 2.2.推导ax+by=gcd(a, b)得到x与y 2.2.1.推导过程 2.2.2.代码实现 2.3.推导ax+by= ...
最新文章
- 向大家推荐一个C/C++通用Makefile
- 无线基站侧的信令风暴根因——频繁的释放和连接RRC产生大量信令、设备移动导致小区重选信令增加、寻呼信令多...
- Day34 数据库的增、删 、改、查
- java指导手册,Java 注解指导手册 – 终极向导
- Hypertable hbase hdfs kfs java与c++的较量
- html中内联的form,bootstrap3.0教程之表单(form)使用详解
- php 本地mysql 代码_基于本地数据库的 IP 地址查询 PHP 源码
- JavaScript 更新对象属性
- 内存分区与栈帧使用分析
- 12.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
- C#编写程序监测某个文件夹内是否有文件进行了增,删,改的动作?
- python搭建微信小程序卖货要收费用吗_个人的微信小程序做店铺收费吗?要收多少...
- 语义分割——DeepLabv3+的学习笔记~
- 在条件类型中使用 infer 关键字
- tensorflow实现余弦cosine相似度
- 如何在使用 Spotify 时更好地保护您的隐私?
- java显示一个钟表_java实现时钟效果
- 批量转化文件夹下图片格式方法,简单易操作!
- Nginx 指定域名(或子域名)和网站绑定
- 【计算机网络:自顶向下方法】期末复习总结(USTC 2020秋 zq班)