关于扩展欧几里得算法和逆元

1.扩欧

a*x1+b*y1=gcd(a,b);

b*x2+(a%b)*y2=gcd(b, (a%b))= gcd(a,b);

a%b=a-(a/b)*b;

联立可得

x1=y2

y1=x2-(a/b)*y2;

递归的边界为b=0

此时x=1,y=0,然后回溯即可。

为什么要x=1,y=0呢?

因为此时gcd(a,b)=gcd(a,0)=a,故a*1+b*0=gcd(a,b)=a;其实y!=0也可以,但是会爆int。

//17.11.6

扩欧的条件是a*x1+b*y1=gcd(a,b),=右边一定是gcd(a,b),如果gcd(a,b)前面有系数k,在求出来一组解之后,再*k就好了。

//2019.3.26

a*x1+b*y1=c,如果c不是gcd(a,b)的倍数,就没有整数解

怎么求最小正整数解呢

在用扩欧求出一组 ax+by=c 特解之后,比如(x2,y2),对于任意一个通解(x1,y1), ax1+by1=ax2+by2, 移项之后,a(x1-x2)=b(y1-y2),令g=gcd(a,b),a'=a/g,b'=b/g,则a'(x1-x2)=b'(y1-y2), 因为 gcd(a',b')=1,  (x1-x2)=kb' ,同理(y1-y2)=k1 a' ,所以x1=x2+kb',所以最小正整数解就是特解x0的 (x0%b'+b')%b', 这样就不用管特解的正负了。

如果对于读入的a,b,c存在小于0的,令flag=-1,x*=flag就完事了

扩展欧几里得算法求逆元c语言,关于扩展欧几里得算法和逆元相关推荐

  1. C语言:欧几里得算法求最大公约数

    文章目录 欧几里得算法 C语言:欧几里得算法求最大公约数 C语言:穷举法 欧几里得算法 举个例子说明欧几里得算法. 如图所示,用正方形地板砖,把这一块粉红色空地(长为xxx,宽为yyy,x>yx ...

  2. 欧几里得算法求最大公约数之惊掉下巴的代码简化(纯C语言)

    欧几里得算法求最大公约数也叫辗转相除法. 证明 有两个数a,b,且a = kb + r(a,b,k,r皆为正整数,且r<b) 假设d为a,b的一个公约数 而r = a - kb,两边同时除以d, ...

  3. 欧几里得算法求最大公约数python,算法:欧几里得求最大公约数(python版)

    #欧几里得求最大公约数 #!/usr/bin/env python #coding -*- utf:8 -*- #iteration def gcd(a,b): if b==0: return a e ...

  4. 用欧几里得算法求最大公约数_欧几里得算法:GCD(最大公约数),用C ++和Java示例解释...

    用欧几里得算法求最大公约数 For this topic you must know about Greatest Common Divisor (GCD) and the MOD operation ...

  5. 离散数学/初等数论:用“质因子分解法”和“欧几里得算法”求最大公约数gcd;“质因子分解法”和“最简算法”求最小公倍数lcm;以及对“意义”的一些看法。

    需要在开头提前说明,本篇文章仅仅用于在学习初等数论或者离散数学时候对算术基本定理的理解,实际应用的时候把结论告诉大家,想求最大公约数就用欧几里得算法是最简单的,在本篇不再赘述,有机会我会在其他文章中说 ...

  6. 辗转相除法(欧几里得算法)求 最大公约数与最小公倍数+推论与证明。

    首先我们规定:0不参与公约数和公倍数的讨论 先来讨论最大公约数: 最大公约数求法:两个数的所有公共质数相乘. 考虑三个问题. 为什么是公共的:公共代表这个数可以被两个数都整除 为什么是质数:合数一定能 ...

  7. 欧几里得算法求最大公约数、最大公倍数

    欧几里得算法求最大公约数.最大公倍数 最大公约数(Greatest Common Divisor, GCD),是指2个或N个整数共有约数中最大的一个.a,b的最大公约数记为(a, b).相对应的是最小 ...

  8. 欧几里得算法求两个正整数的最大公约数

    此题可以使用暴力破解法解决,但是效率不高. 欧几里德算法又称辗转相除法,其计算原理依赖于下面的定理: gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0)   ...

  9. 欧几里得算法求m,n(非负整数)的最大公约数,记为gcd(m,n);java版

    基础知识:最大公约数:自行百度: 欧几里得-最大公约数算法: gcd(m,n) = gcd(n,m mod n)  (m mod n 表示:m除以n后的余数) 重复此步骤,知道 m mod n等于0: ...

最新文章

  1. R语言将多个dataframe导出到excel的多个表单(sheet)实战
  2. HDOJ2020 ( 绝对值排序 ) 【水题】
  3. Django自带的加密算法及加密模块
  4. weblogic查看内存情况
  5. 常量池之字符串常量池String.intern()
  6. 设备驱动模型之device-driver
  7. vsco_VSCO重新设计:更直观,更简化的界面
  8. ECMAScript 发展简史
  9. RLException: XXX is neither a launch file in package XXX nor is XXX a launch file name问题解决
  10. jquery中获得table中第几个td元素的值
  11. dataframe scala 修改值_如何填补Pandas中的缺失值(机器学习入门篇)
  12. maven 手动安装ojdbc7
  13. CondaValueError : prefix already exists: /**/anaconda3
  14. 如何删除Windows我的电脑地址栏搜索记录
  15. 教你写递归——递归三部曲
  16. 网络编程:(三)网络编程编程接口
  17. 给高科技强国的后来者埋下的痛
  18. 信奥中的数学基础:分解质因数
  19. STM32——三原色
  20. c语言漩涡图形,我看大家都在讨论漩涡矩阵,网上搜了一个大家讨论讨论。

热门文章

  1. 有哪些比较好的wince 播放器 支持硬解的
  2. FireMonkey开发: 图片缩放
  3. 官网教程:什么是Apache Hadoop?
  4. CAD安装1606错误could access network location AutoDesk\AutoCAD2021\R24.0
  5. 记录ci框架中定时任务的执行
  6. 入门爬虫,爬取数据这一篇就够了!!!
  7. Emgu-WPF 激光雷达研究-绘制雷达图
  8. Vue开发中的一些常见套路和技巧(上)
  9. Mysql 的其他函数
  10. 事件营销说到底就是抓住热点事件做营销