一:前置知识点

a:欧几里得算法:

1:欧几里得算法 欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。

2:欧几里得算法证明:

两个引理:

  • 若d是a和b的公约数,那么d也是b和c的公约数(c=a%b)
  • 若d是b和c的公约数(c=a%b),那么d也是a和b的公约数
 按照辗转相除法如此循环下去,每次的余数r小于除数n ,那么相当于每次的被除数(变为上次的的除数)变小了,除数也变小了,而公因数的集合一直都没有变,也就是被除数和除数越来越小,而二者所包含的公共公因数又不变这样循环下去,最后除数就会变为最大公因数  

3:代码模板

int gcd(int a ,int b){
return b ? gcd(b,a%b ) : a ;
}

b: 倍祖定理

任意两个整数a,b,最大公约数为d=gcd(a,b),那么对于任意的整数x,y,ax+by=m,构成的m一定是d的整数倍(即m%d=0)

二:扩展欧几里得初识:

扩展欧几里得算法(英语:Extended Euclidean algorithm)是欧几里得算法(又叫辗转相除法)的扩展。已知整数a、b,扩展欧几里得算法可以在求得a、b的最大公约数的同时,能找到整数x、y(其中一个很可能是负数),使它们满足贝祖等式

                                               ax + by = gcd(a,b)

如果a是负数,可以把问题转化成|a|(-x)+by = gcd(|a|,b) ,然后令x'=(-x)。

通常谈到最大公约数时,我们都会提到一个非常基本的事实:给予二个整数a、b,必存在整数x、y使得ax + by = gcd(a,b)

有两个数a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到ax+by=gcd(a,b)的整数解。

扩展欧几里得算法可以用来计算模反元素(也叫模逆元),而模反元素在RSA加密算法中有举足轻重的地位。

三:扩展欧几里得的应用:

1:求二元一次线性方程的整数解

扩展欧几里得算法的描述是:一定存在整数 x, y 满足等式 a * x + b * y = gcd(a,b)

所以扩展欧几里得算法可以计算出最大公因数gcd(a,b),又可以为计算出x,y的一组特解,如何求解呢

  • 带入等式:gcd(b,a%b) = bx1 + (a%b)*y1
  • gcd(b,a%b) =b*x1+(a-(a/b)*b)*y1
  • gcd(b,a%b) = a*y1 + b*(x1-(a/b)*y1)
  • 当b不等于0时,gcd(a,b) = gcd(b,a%b);
  • 所以 x= y1 ; y = x1 - (a/b) *y1 ;

根据这个过程,我们可以递归求解,那退出条件是什么呢,我们可以看到当b==0 是,求出公约数

,当b==0 是,a*x = gcd(a,0) = a ,此时,x==1 ,y等于0可以计算出一组特解

代码模板:

//求x,y 使得ax + by = gcd(a,b) ;int exgcd(int a , int b , int &x ,int &y){if(!b){x=1 ; y = 0 ;return a ; }int d = exgcd(b,a%b,x,y);int temp = y ;y= x-(a/b)*y ; x= temp ; return d ;
} 

2: 乘法逆元
这里先说一下乘法逆元,我们都知道,‘取模%’ 具有加、减、乘法的分配率即:
1). (a+b) % c = ((a%c) + (b%c))%c
2). (a-b) % c = ((a%c) - (b%c))%c
3). (a×b) % c = ((a%c)× (b%c))%c
这样的好处就是,如果a+b+…+n计算出来的值太大的话,可以通过分配率来计算出每一步的值在求余。
除法没有分配率,但是有乘法逆元。就是将除法转化为乘法。

逆元:设c是b的逆元,则有ax ≡ 1(mod p);
(a/b)mod p = (a/b) * 1(mod p) = (a/b)bx (mod p) = ax(mod p)

定理:a存在模p的乘法逆元的充要条件是gcd(a,p) = 1;(定理的证明在这里就不叙述了)

对于ax + by = 1,可以看出x是a模b的乘法逆元,y是b模a的乘法逆元。

四:题目练习

同余方程(传送门)

题目描述:求关于xx的同余方程 ax≡1(modb) 的最小正整数解。

输出格式

一个正整数 x_0x0​,即最小正整数解。输入数据保证一定有解。

输入输出样例

输入 #1复制

3 10

输出 #1

7

分析

板子题,唯一需要做的就是转化一下将 ax ≡  1( mod b ) 变为 ax - by = 1 的形式,最后由于输出最小的正整数,我们调整一下即可

#include <bits/stdc++.h>
using namespace std ;int a,b ,x,y,k; void exgcd (int a, int b ){if(!b){x=1 ; y = 0 ;return  ; }exgcd(b,a%b);int temp = y ;y= x-(a/b)*y ; x= temp ; return  ;
} int main(){cin >> a>>b ; exgcd(a,b) ; cout << (x+b)%b << endl ;
} 

五:注意:

如果需要求该方程的最小非负整数解,该如何调整?

容易发现 a x + b y = g c d ( a , b ) ,等价于a ∗ ( x − k ∗ b ) + b ∗ ( y + k ∗ a ) = g c d ( a , b )

所以对于x的调整为x=(x%b+b)%b

对于y的调整为y=(y%a+a)%a

六:谢谢你的阅读,能否给个小赞再走

数论基础——扩展欧几里得【详细】相关推荐

  1. 1018 - 数论之扩展欧几里得 - 吃蛋糕

    吃蛋糕 描述 Beny 想要用蛋糕填饱肚子.Beny 一共想吃体积为 c 的蛋糕,他发现有两种蛋糕可以吃,一 种体积为 a,一种体积为 b,但两种蛋糕各有特色.Beny 想知道他一共有多少种不同吃法, ...

  2. 扩展欧几里得的应用(超详细求逆元求解方程)

    扩展欧几里得算法: 1.扩展欧几里得算法可以求逆元 2.扩展欧几里得算法可以求类似 ax+by=m, 的所有整数解,当m%gcd(a,b)==0 则ax+by=m有无线多个解,否则无解 扩展欧几里得的 ...

  3. 数学--数论--(逆元)扩展欧几里求解+证明

    欧几里得与扩展欧几里得 先解释一下符号: A≡B(modC)符号代表A模C与B模C相等,即A/C与B/C同余.A≡B (mod C)符号代表A模C与B模C相等,即A/C与B/C同余.A≡B(modC) ...

  4. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  5. JZYZOJ1371 青蛙的约会 扩展欧几里得 GTMD数论

    http://172.20.6.3/Problem_Show.asp?id=1371 题意是两个青蛙朝同一个方向跳 http://www.cnblogs.com/jackge/archive/2013 ...

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

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

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

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

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

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

  9. [数论]Gcd/ExGcd欧几里得学习笔记

    \(Q\):什么是\(GCD\)? \(GCD\) \(GCD\),即最大公约数(\(Greatest\ Common\ Divisor\)) 对于两个自然数\(a,b\),定义\(GCD(a,b)\ ...

  10. CodeForces - 724C Ray Tracing(扩展欧几里得解方程)

    题目链接:点击查看 题目大意:在 n∗mn*mn∗m 的矩阵中,从点 (0,0)(0,0)(0,0) 发射一个小球,以四十五度的方向出发,速度是 2\sqrt{2}2​,当碰到壁时,会进行反射:当碰到 ...

最新文章

  1. Gatling教程系列一简单GET请求测试(二)
  2. 微x怎么设置主题_红人堂:抖音直播预告文案怎么写?5个小技巧提高你的文案吸引力!...
  3. 数据库2.1.1mysql的特点
  4. thinkphp mysql exp_thinkphp备份数据库的方法分享
  5. 【报告分享】2020中国企业数字化转型研究报告-清华大学.pdf(附下载链接)
  6. 使用 JavaScript File API 实现文件上传
  7. 【数据分析】基于matlab GUI成绩管理系统【含Matlab源码 256期】
  8. 基站定位(Google API)
  9. 想买个吉他英雄3的正版
  10. 禅道 10.0.alpha 版本发布,全新的界面和交互体验
  11. [转]关于英文中的标点符号
  12. 分享时的缩略图不显示问题
  13. 实时操作系统概述(推荐) .
  14. 什么是annotations
  15. 华理c语言设计网上作业,华理网上作业 之 大学英语预备
  16. nargchk和nargin
  17. 验证身份证号码是否合法
  18. 简单四步抓取腾讯视频MP4文件
  19. 一边攒大米,一边做公益
  20. 牛客网--14609--Forever97与寄信

热门文章

  1. Android仿网易头条评论,仿网易/今日头条滑动视图
  2. 优盘(U 盘) 采用TLC, MLC, SLC芯片 的区别 与使用寿命
  3. HyperX旋火游戏鼠标推荐——轻量化鼠标设计界的艺术品
  4. 选择最佳的DC/DC转换器的五大秘诀
  5. PHP探测手机客户端
  6. VS2010创建OCX控件
  7. ISO 2768-2 标准
  8. Android app 页面加载统计工具
  9. Hive常用正则表达式
  10. 便携式嵌入式软件接口测试工具