同余问题(一)——扩展欧几里得exgcd
前言
扩展欧几里得算法是一个很好的解决同余问题的算法,非常实用。
欧几里得算法
简介
欧几里得算法,又称辗转相除法。
主要用途
求最大公因数\(gcd\)。
公式
\(gcd(a,b)=gcd(b,a\%b)\)
公式证明
\(a\)可以表示成\(a=kb+a\%b\)(\(k\)为自然数)。
假设\(g\)是\(a,b\)的一个公约数,则有\(g|a, g|b\)。
\(\because a\%b=a-kb\),
\(\therefore g|(a\%b),\therefore g\)是\(b,a\%b\)的公约数。
综上所述,\(a,b\)和\(b,a\%b\)的公约数是一样的,其\(gcd\)也必然相等。
代码实现
inline int gcd(int x,int y) {return y?gcd(y,x%y):x;}
扩展欧几里得算法
简介
扩展欧几里得建立于欧几里得算法的基础上。(该算法的升级版 徐xgcd有待XuRuiYang奆佬发明)
主要用途
对于已知a,b求解x,y使其满足ax+by=gcd(a,b)。
解法
我们可以对\((a,b)\)不断辗转相除。
根据欧几里得算法,最后剩下的两个数一定为\((gcd(a,b),0)\),
显然,此时\(x=1,y=0\)是原式的一组解。
现在,我们需要考虑,若已知\((b,a\%b)\)的解,如何推出\((a,b)\)的解。
设\(x_0,y_0\)为\((b,a\%b)\)的一组解,则\(x_0·b+y_0(a\%b)=gcd(b,a\%b)\)。
将这个式子转化一下,可以得到\(x_0·b+y_0(a-\lfloor\frac ab\rfloor*b)=gcd(a,b)\)。
去括号,得\(x_0·b+y_0·a-(y_0·\lfloor\frac ab\rfloor)·b=gcd(a,b)\)。
合并同类项,得\(y_0·a+(x_0-y_0·\lfloor\frac ab\rfloor)·b=gcd(a,b)\)。
\(\therefore x=y_0,y=x_0-y_0·\lfloor\frac ab\rfloor\)是原式的一组解。
递归即可。
代码实现
inline int exgcd(int x,int y,int &s1,int &s2)
{
if(!y) return s1=1,s2=0,x;
register int res=exgcd(y,x%y,s2,s1);
return s2-=x/y*s1,res;
}
扩欧的典型应用:求乘法逆元
关于乘法逆元可以看看这篇博客:浅谈乘法逆元的三种解法
同余问题(一)——扩展欧几里得exgcd的更多相关文章
- 扩展欧几里得(exgcd)与同余详解
exgcd入门以及同余基础 gcd,欧几里得的智慧结晶,信息竞赛的重要算法,数论的...(编不下去了 讲exgcd之前,我们先普及一下同余的性质: 若,那么 若,,且p1,p2互质, 有了这三个式子, ...
- 浅谈扩展欧几里得[exgcd] By cellur925
关于扩展欧几里得从寒假时就很迷,抄题解过了同余方程,但是原理并不理解. 今天终于把坑填上了qwq. 由于本人太菜,不会用markdown,所以这篇总结是手写的(什么).(字丑不要嫌弃嘛) ****** ...
- 扩展欧几里得(exgcd)-求解不定方程/求逆元
贝祖定理:即如果a.b是整数,那么一定存在整数x.y使得ax+by=gcd(a,b).换句话说,如果ax+by=m有解,那么m一定是gcd(a,b)的若干倍.(可以来判断一个这样的式子有没有解)有一个 ...
- 扩展欧几里得 exGCD
Elementary Number Theory - Extended Euclid Algorithm Time Limit : 1 sec, Memory Limit : 65536 KB Jap ...
- 数论--扩展欧几里得exgcd
算法思想 我们想求得一组\(x,y\)使得 \(ax+by = \gcd(a,b)\) 根据 \(\gcd(a,b) = \gcd(b,a\bmod b)\) 如果我们现在有\(x',y'\) 使得 ...
- 【数学】【NOIp2012】同余方程 题解 以及 关于扩展欧几里得与同余方程
什么是GCD? GCD是最大公约数的简称(当然理解为我们伟大的党也未尝不可).在开头,我们先下几个定义: ①a|b表示a能整除b(a是b的约数) ②a mod b表示a-[a/b]b([a/b]在Pa ...
- poj1061-青蛙的约会-(贝祖定理+扩展欧几里得定理+同余定理)
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions:132162 Accepted: 29199 Descripti ...
- poj 2891 扩展欧几里得迭代解同余方程组
Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...
- Acwing-203-同余方程(扩展欧几里得)
链接: https://www.acwing.com/problem/content/205/ 题意: 求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解. 思路: 首先:扩展欧几里得推导 ...
随机推荐
- Codeforces Round #520 (Div. 2)B(贪心,数学)
#include<bits/stdc++.h>using namespace std;int mi[100007];int main(){ int cnt=0; int flag=0; i ...
- [Unity3D] 5.0 图集合并扩展工具,用于解决UGUI与AssetBundle打包造成资源包过大的问题
[Unity3D] 5.0 图集合并扩展工具,用于解决UGUI与AssetBundle打包造成资源包过大的问题 2017年07月05日 15:57:44 阅读数:1494 http://www.cpp ...
- 死磕 java同步系列之synchronized解析
问题 (1)synchronized的特性? (2)synchronized的实现原理? (3)synchronized是否可重入? (4)synchronized是否是公平锁? (5)synchro ...
- 「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组
题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能 ...
- iOS拼图
#import "ViewController.h" @interface ViewController () @end @implementation ViewContro ...
- 洛谷P4018 Roy&October之取石子
题目背景 \(Roy\)和\(October\)两人在玩一个取石子的游戏. 题目描述 游戏规则是这样的:共有\(n\)个石子,两人每次都只能取\(p^k\)个(\(p\)为质数,\(k\)为自然数,且 ...
- ELK系列(5) - Logstash怎么分割字符串并添加新的字段到Elasticsearch
问题 有时候我们想要在Logstash里对收集到的日志等信息进行分割,并且将分割后的字符作为新的字符来index到Elasticsearch里.假定需求如下: Logstash收集到的日志字段mess ...
- Linux系统下强制其他用户下线
强制其他用户下线命令格式:pkill -kill -t tty 解释: pkill -kill -t 强制其他用户下线命令 tty 强制其他用户下线的TTY 如上强制其他用户下线的命令为: pkill ...
- WebP图片格式
腾讯科技讯 科技博客GigaOM近日撰文称,谷歌(微博)试图让WebP图片格式取代JPEG等现有图片格式.虽然谷歌无法很快达成所愿,但WebP仍然会对互联网产生重大影响. 文章全文如下: 受够了 ...
- ubuntu网络已禁用解决办法
1.首先停掉network-manager这个服务 sudo service network-manager stop 2.删除掉NetworkManager.state这个文件 sudo rm /v ...