欧几里得算法:

\[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. centos 6.x 启动过程简介(来自老男孩)

  2. 喵星之旅-狂奔的兔子-redis安装

    一.前置条件 服务器版本CentOS-8-x86_64-1905-dvd1,在此版本上安装最新版redis.centos7以上版本都可以,不建议6以前的版本. 二.下载redis,并上传到服务器 登录 ...

  3. 【原】cookie和session的区别

    1.存放位置 cookie的数据存放在客户端的浏览器上,session存放在服务器上 2.安全程度 cookie不是很安全,别人通过分析本地的cookie并进行cookie欺骗:考虑到安全应该使用se ...

  4. 关于Debug Assertion Failed问题

    书上代码: #include<stdio.h> #include<stdlib.h> /* 提供malloc().free()函数 */ #include<string. ...

  5. java finalize学习

    1 finalize()调用的时机 与C++的析构函数(对象在清除之前析构函数会被调用)不同,在Java中,由于GC的自动回收机制,因而并不能保证finalize方法会被及时地执行(垃圾对象的回收时机 ...

  6. C、C++ 不得宠,微软正开发新的编程语言!

    76 年迭代与更新,编程语言界,谁主沉浮? 在六百多种编程语言中,对于开发者而言,其主观印象中或只有几种主流的编程语言,如 Java.C.C++.C#.新贵 Python 等,而之所以它们能够成为主流 ...

  7. Unknown column '××' in 'where clause',出现这个问题,如何处理?

    stmt.executeQuery("select * from user where username = " + name); 执行上述代码就会引发该错误. 原因是:拼凑sql ...

  8. 笔记-python-lib—data types-enum

    笔记-python-lib—data types-enum 1.      enum Source code: Lib/enum.py 文档:https://docs.python.org/3/lib ...

  9. 为spring boot 写的Controller中的rest接口配置swagger

    1.pom.xml文件中加入下列依赖: <dependency> <groupId>io.springfox</groupId> <artifactId> ...

  10. C 语言入门---第十一章---C语言重要知识点补充

    ====C语言typedef 的用法==== 1. C语言允许为一个数据类型起一个新的别名,就像给人起绰号一样. typedef OldName newName; typedef 和 #define ...