文章目录

  • 数论基础——扩展欧几里得算法(模板)
    • 欧几里得算法
      • 原理
      • 代码
    • 扩展欧几里得算法
      • 原理
      • 代码
      • 应用

数论基础——扩展欧几里得算法(模板)

欧几里得算法

原理

设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.求解模的逆元;

数论基础——扩展欧几里得算法(模板)相关推荐

  1. 密码学基础算法(一)基于整数的欧几里得算法和扩展欧几里得算法

    图片来源: 随便谷歌的一个图片 图片地址: https://jason-chen-1992.weebly.com/uploads/1/0/8/5/108557741/euclidean_3_orig. ...

  2. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...

    Codeforces 1106F Lunar New Year and a Recursive Sequence (数学.线性代数.线性递推.数论.BSGS.扩展欧几里得算法) 哎呀大水题..我写了一 ...

  3. 数论:欧几里得与扩展欧几里得算法

    文章目录 欧几里得算法 历史发展 表示 证明 代码 例题 扩展欧几里得算法 表示 求解方法 代码 其他定理: 例题 欧几里得算法 历史发展 欧几里得算法用来求得两个数的最大公约数,大约公元前300年首 ...

  4. 欧几里得算法及其扩展欧几里得算法——数论

    欧几里得算法(gcd):   又名辗转相除法,是求最大公约数的算法.辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数.两个数的最大公约数通常写成 gcd(a, b). ...

  5. 扩展欧几里得算法(exgcd)

    前置知识 数论基本概念,欧几里得算法 裴蜀定理 在学习exgcd之前,我们需要先学习一下裴蜀定理. 裴蜀定理有两条: 对于任意的整数 a,ba,ba,b,存在一组整数 x,yx,yx,y,使得 ax+ ...

  6. 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...

    难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...

  7. 扩展欧几里得算法、乘法逆元与中国剩余定理

    文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...

  8. 欧几里得算法/扩展欧几里得算法

    转载请说明出处:http://blog.csdn.net/leader_one/article/details/75222771 说在前面 出于尊重,简单介绍一下欧几里得(想了解更多自己百度去) 欧几 ...

  9. Python在GF(2⁸)有限域上求解多项式的乘法逆元——基于扩展欧几里得算法

    文章目录 一.前言 二.数学基础 1.GF(2⁸)有限域内的多项式 2.不可约多项式 3.多项式模运算 3.乘法逆元 三.算法步骤 1.扩展欧几里得算法 2.多项式除法 3.多项式乘法 四.代码实现 ...

  10. 欧几里得与扩展欧几里得算法(含推导过程及代码)

    文章目录 前言 一.欧几里得算法 二.扩展欧几里得算法 2.1.认识裴蜀定理 2.2.推导ax+by=gcd(a, b)得到x与y 2.2.1.推导过程 2.2.2.代码实现 2.3.推导ax+by= ...

最新文章

  1. 向大家推荐一个C/C++通用Makefile
  2. 无线基站侧的信令风暴根因——频繁的释放和连接RRC产生大量信令、设备移动导致小区重选信令增加、寻呼信令多...
  3. Day34 数据库的增、删 、改、查
  4. java指导手册,Java 注解指导手册 – 终极向导
  5. Hypertable hbase hdfs kfs java与c++的较量
  6. html中内联的form,bootstrap3.0教程之表单(form)使用详解
  7. php 本地mysql 代码_基于本地数据库的 IP 地址查询 PHP 源码
  8. JavaScript 更新对象属性
  9. 内存分区与栈帧使用分析
  10. 12.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
  11. C#编写程序监测某个文件夹内是否有文件进行了增,删,改的动作?
  12. python搭建微信小程序卖货要收费用吗_个人的微信小程序做店铺收费吗?要收多少...
  13. 语义分割——DeepLabv3+的学习笔记~
  14. 在条件类型中使用 infer 关键字
  15. tensorflow实现余弦cosine相似度
  16. 如何在使用 Spotify 时更好地保护您的隐私?
  17. java显示一个钟表_java实现时钟效果
  18. 批量转化文件夹下图片格式方法,简单易操作!
  19. Nginx 指定域名(或子域名)和网站绑定
  20. 【计算机网络:自顶向下方法】期末复习总结(USTC 2020秋 zq班)

热门文章

  1. 理解Java虚拟机体系结构
  2. 给最后一个li增加样式
  3. 【云栖大会】创无止境 YunOS云栖大会诠释万物互联
  4. openstack nova后端使用ceph rbd(增加在线迁移live_migrate和快照snapshot功能)
  5. Day10(--JSP与JSP内置对象)
  6. 走一条硬件工程师的道路
  7. 2010罗森伯格HDCS®综合布线分布线销商大会顺利召开
  8. idea exclude from compile 再加回来
  9. css 的块级元素和行内元素
  10. 防火防盗竟防不了网络攻击 智能摄像机的网络安全怎么办?