欧几里得算法:

\[gcd(a,b)=gcd(b,a\bmod b)
\]

证明:

显然(大雾)

扩展欧几里得及证明:

为解决一个形如

\[ax+by=c
\]

的方程。

根据裴蜀定理,当且仅当

\[gcd(a,b)|c
\]

时方程有解。

然后解这个方程。。。

我觉得大概就是:

我们设

\[ax_1+by_1=gcd(a,b)
\]

\[bx_2+(a\bmod b) y_2=gcd(b,a\bmod b)
\]

根据欧几里得以及\(a\bmod b=a-\lfloor a/b\rfloor\)有

\[ax_1+by_1=bx_2+(a-\lfloor a/b\rfloor)y_2
\]

\[ax_1+by_1=ay_2+bx_2-\lfloor a/b\rfloor y_2
\]

根据恒等定理 (?)得:

\[x1=y2,y1=x2-\lfloor \frac{a}{b} \rfloor *y2
\]

然后我们知道,\(gcd(a,b)|c\)。

那么我们算出\(ax+by=gcd(a,b)\)的答案来之后,只要把他乘上\(c/gcd(a,b)\)就好啦。

反正我知道代码哼唧

Code


void exgcd(int a, int b, int &x, int &y)
{
if(b == 0)
{
x = 1;y = 0;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
//计算ax+by=gcd(a,b)的值
}

Gcd&Exgcd的更多相关文章

  1. Gcd&Exgcd算法学习小记

    Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...

  2. gcd&&exgcd&&斐蜀定理

    gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } re ...

  3. 读入 并查集 gcd/exgcd 高精度 快速幂

    ios_base::sync_with_stdio(); cin.tie(); ], nxt[MAXM << ], Head[MAXN], ed = ; inline void added ...

  4. 【数论】如何证明gcd/exgcd

    我恨数论 因为打这篇的时候以为a|b是a是b的倍数,但是懒得改了,索性定义 a|b 为 a是b的倍数 咳咳,那么进入正题,如何证明gcd,也就是 gcd(a,b) = gcd(b,a%b)? 首先,设 ...

  5. gcd && exgcd算法

    目录 欧几里德算法与扩展欧几里德算法 1.欧几里德算法 2.扩展欧几里德算法 欧几里德算法与扩展欧几里德算法 1.欧几里德算法 #include<bits/stdc++.h> using ...

  6. 约数,gcd,exgcd.

    很多题都是要求出什么最大公约数或者最小公倍数什么的,也有一些题目是和约数个数有关的,所以需要总结一下. 首先最大公约数和最小公倍数怎么求呢? 当然是观察法了,对于一些很聪明的孩纸他们一般随便一看就秒出 ...

  7. gcd, exgcd的证明

  8. 数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho

    数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p ...

  9. 扩展欧几里得(exgcd)与同余详解

    exgcd入门以及同余基础 gcd,欧几里得的智慧结晶,信息竞赛的重要算法,数论的...(编不下去了 讲exgcd之前,我们先普及一下同余的性质: 若,那么 若,,且p1,p2互质, 有了这三个式子, ...

随机推荐

  1. acm数论之旅(转载)---最大公约数与最小公倍数

    gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm     ( gcd就是gcd(a, b), ( •̀∀•́ ) ...

  2. JavaSE复习~基本数据类型

    数据类型 java有两大类数据类型:基本数据类型 和 引用数据类型 基本数据类型 整数型:byte.short.int.long 浮点型:float.double 字符型:char 布尔型:boole ...

  3. 内存泄漏与weakMap、weakSet

    “DOM 引用造成内存泄露”这一点我们可以使用WeakMap或者WeakSet存储DOM节点,DOM被移除掉WeakMap或者WeakSet内部的DOM引用会被自动回收清除 https://jueji ...

  4. 大盘及策略收益率的公式推导与Python代码

    一.模型前提与假设 设策略总天数为\(n\).第\(t\)日大盘的收盘价为\(P_t\).第\(t\)日的单日收益率为\(r_t\).\(n\)天的累积收益率为\(r_{cum}\) 假设策略仅买卖大 ...

  5. 【 hibernate 】基本配置

    hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibe ...

  6. UDP通讯代码

    UDP客户端代码: import socket # 创建套接字 socket.AF_INET:IPV4 socket.SOCK_DGRAM:UDP协议 udp_client=socket.socket ...

  7. 10 JavaScript对象&类&for循环

    JavaScript对象 JavaScript中所有事物都是对象:字符串.数值.数组.函数.数学和正则表达式 JavaScript有些类型可以是字面量而非对象:如字符串.数值.布尔值 JavaScri ...

  8. 十一 三种Struts2的数据封装方式,封装页面传递的数据

    Struts2的数据封装:Struts2是一个web层框架,框架是软件的半成品.提供了数据封装的基本功能. 注:Struts2底层(核心过滤器里面的默认栈里面的拦截器,具体见struts-defaul ...

  9. Servlet+Spring+Mybatis初试

    1.导入相关的jar包 druid mybatis mybatis-spring pageHelper mysql驱动包 spring-context-support spring-aspect sp ...

  10. 吴裕雄--天生自然 JAVA开发学习:解决java.sql.SQLException: The server time zone value报错

    这个异常是时区的错误,因此只你需要设置为你当前系统时区即可,解决方案如下: import java.sql.Connection ; import java.sql.DriverManager ; i ...