扩展欧几里得exgcd算法 acm寒假集训日记22/1/12
数学证明
ax + by = gcd(a,b)
令gcd(a,b) = d
得:ax + by = d ①
因为:gcd(a,b) = gcd(b,a%b)
所以:bx + a%b * y = d
bx + (a-[a/b] * b) * y = d 注:[ ]是向下取整的意思
整理得:bx + ay - [a/b] * by = d
ay + b(x - [a/b] * y) = d ②
由①和②得:
1 . x = y
2. y = x - [a/b] * y = x - [a/b] * x
边界:
当b=0时,ax + by = gcd(a,b) = a
ax = a ==> x = 1
by = 0 ==> y = 0
综上:
x = 1, y = 0 (b=0)
x = y, y = y-[a/b] * x (或写成y-=[a/b]*x) (b!=0)
代码实现
void exgcd(ll a,ll b,ll &d,ll &x,ll &y)
{if(b==0){d = a;x = 1;y = 0;}else{exgcd(b,a%b,d,y,x);y -= x*(a/b);}
}
注意:x y 需要引用操作
老规矩,上一道例题收个尾!
给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
Input
输入2个数M, N中间用空格分隔(1 <= M < N <= 10^9)
Output
输出一个数K,满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
Sample Input
2 3Sample Output
2
AC代码如下:
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
void exgcd(ll a,ll b,ll &d,ll &x,ll &y)
{if(b==0){d = a;x = 1;y = 0;}else{exgcd(b,a%b,d,y,x);y -= x*(a/b);}
}
int main()
{ll m,n,k;cin>>m>>n;ll x,y,d;exgcd(m,n,d,x,y);k = (x%n+n)%n;cout<<k<<endl;
}
最后,感谢您的阅读!!!
因为,约还没有赴,你还没有见着,事还没有成。所以,为之千千万万遍努力。
扩展欧几里得exgcd算法 acm寒假集训日记22/1/12相关推荐
- KMP算法(字符串匹配问题)acm寒假集训日记22/1/19
首先,先看一道例题: 如果不考虑超时的话,我们完全可以用最朴素的方法(暴力)去求 //暴力算法(n*m) int ViolentMatch(char *s,char *p) {int sLen = s ...
- 最小生成树(Kruskal算法+Prim算法)简单讲解+最小生成树例题 acm寒假集训日记22/1/8
算法简讲部分: Kruskal算法: 基于贪心策略大致过程分为第三步:1. 我们先用结构体把每条边的端点和权值记录下来,然后对每条边按权值进行排序2. 因为 使图连通最少需要n-1 条边,所以我们依次 ...
- spfa(STL写法)简单讲解+最短路(spfa)例题 acm寒假集训日记22/1/7
前言:SPFA(Shortest Path Faster Algorithm)算法是求单源最短路线的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法. spfa 其实可以 ...
- 【初学线段树,看这篇文章准没错】线段树(单点修改and区间修改)acm寒假集训日记22/1/10
线段树 线段树是算法竞赛中常用的用来维护区间信息的数据结构.是一名ACMer 需要掌握的一种基础.重要的数据结构线段树可以在O(logN)的时间复杂度内实现单点修改,区间修改,区间查询(区间求和,区间 ...
- 最少换乘(最短路+恶心的输入)acm寒假集训日记22/1/3 or 22/1/4
题目如下: AC代码如下: #include<iostream> #include<cstring> #include<cstdio> using namespac ...
- 逛画展(单调队列) acm寒假集训日记22/1/1
题目如下: AC代码如下: #include<iostream> #include<cstdio> #include<algorithm> #include< ...
- 矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15
今天凌晨3点才睡,没想到通过看小说抑制玩游戏,反而看小说的时间更长. u1s1:那小说太刺激了,晚上看很有感觉,风吹草动我就会猛地看过去(类似茄子说柜子动了,哈哈),真TM(语气词)练胆量!!!..Q ...
- G - A Bug‘s Life(并查集) acm寒假集训日记22/1/2
题目如下: 提示:输入很大,你忍一下,小心超时 AC代码如下: #include<iostream> #include<algorithm> #include<cstri ...
- CodeForces 1506C(暴力求最长连续子串) acm寒假集训日记21/12/31or22/1/1
题目如下: AC代码如下: #include<iostream> #include<algorithm> #include<cstring> #include< ...
最新文章
- 根据坐标如何标记图片_如何玩转FloodFill算法?
- linux ext4 img解包打包教程,解打包.img.ext4(转)
- 软件著作权登记证书申请攻略
- 制冷设备维保常见的10大故障!
- 添加白名单_上网行为管理如何添加网站白名单(包括https网站)
- ext显示服务器文件,使用linux的fsck.ext2命令检查及修复ext2文件系统
- 遮罩层中的相对定位与绝对定位(Ajax)
- PHP钥匙导航源码-社区导航双端自适应Typecho模板
- 性能 1.84 倍于 Ceph!网易数帆开源分布式存储系统 Curve
- 霍邱一中2021高考成绩查询入口,2021六安高考成绩查询系统
- 兄弟,学点AI吗?2知识的确定性系统
- Java实现zip文件压缩与解压缩--附完整代码
- java 打印 日历 详细 注解_Java实现按年月打印日历功能【基于Calendar】
- 厉害了,Pandas表格还能五彩斑斓的展示数据,究竟是怎么做到的呢?
- matplotlib显示宋体和Times New Roman
- IllegalStateException: Failed to introspect annotated methods on class org.springframework.boot.web.
- springboot毕设项目东莞汉庭酒店的酒店管理系统的设计与实现4ccnv(java+VUE+Mybatis+Maven+Mysql)
- 数据库初级入门sqlite3版本
- oracle的date_add,SQL Server 中add函数到 oracle date add的操作
- 浅析贝叶斯神经网络(Based on Variational Bayesian)
热门文章
- Percona-XtraDB-Cluster 5.7版本(PXC)集群部署
- C#LeetCode刷题-栈
- mysql基本功能+show+innodb+索引+慢sql+explain
- github在线执行_什么是Github操作,如何自动执行测试和Slack通知?
- 风变编程课 囚徒困境 答案_当您对所有这些有用的在线编程课程感到不知所措时,如何摆脱困境...
- regexbuddy使用记录
- simulink模块的输入端口与参数的关系
- Python爬虫进阶必备 | X中网密码加密算法分析
- Linux编辑只读文件
- Logistic Regression逻辑回归的损失函数与梯度下降训练