数学证明

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 3

Sample 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相关推荐

  1. KMP算法(字符串匹配问题)acm寒假集训日记22/1/19

    首先,先看一道例题: 如果不考虑超时的话,我们完全可以用最朴素的方法(暴力)去求 //暴力算法(n*m) int ViolentMatch(char *s,char *p) {int sLen = s ...

  2. 最小生成树(Kruskal算法+Prim算法)简单讲解+最小生成树例题 acm寒假集训日记22/1/8

    算法简讲部分: Kruskal算法: 基于贪心策略大致过程分为第三步:1. 我们先用结构体把每条边的端点和权值记录下来,然后对每条边按权值进行排序2. 因为 使图连通最少需要n-1 条边,所以我们依次 ...

  3. spfa(STL写法)简单讲解+最短路(spfa)例题 acm寒假集训日记22/1/7

    前言:SPFA(Shortest Path Faster Algorithm)算法是求单源最短路线的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法. spfa 其实可以 ...

  4. 【初学线段树,看这篇文章准没错】线段树(单点修改and区间修改)acm寒假集训日记22/1/10

    线段树 线段树是算法竞赛中常用的用来维护区间信息的数据结构.是一名ACMer 需要掌握的一种基础.重要的数据结构线段树可以在O(logN)的时间复杂度内实现单点修改,区间修改,区间查询(区间求和,区间 ...

  5. 最少换乘(最短路+恶心的输入)acm寒假集训日记22/1/3 or 22/1/4

    题目如下: AC代码如下: #include<iostream> #include<cstring> #include<cstdio> using namespac ...

  6. 逛画展(单调队列) acm寒假集训日记22/1/1

    题目如下: AC代码如下: #include<iostream> #include<cstdio> #include<algorithm> #include< ...

  7. 矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15

    今天凌晨3点才睡,没想到通过看小说抑制玩游戏,反而看小说的时间更长. u1s1:那小说太刺激了,晚上看很有感觉,风吹草动我就会猛地看过去(类似茄子说柜子动了,哈哈),真TM(语气词)练胆量!!!..Q ...

  8. G - A Bug‘s Life(并查集) acm寒假集训日记22/1/2

    题目如下: 提示:输入很大,你忍一下,小心超时 AC代码如下: #include<iostream> #include<algorithm> #include<cstri ...

  9. CodeForces 1506C(暴力求最长连续子串) acm寒假集训日记21/12/31or22/1/1

    题目如下: AC代码如下: #include<iostream> #include<algorithm> #include<cstring> #include< ...

最新文章

  1. 根据坐标如何标记图片_如何玩转FloodFill算法?
  2. linux ext4 img解包打包教程,解打包.img.ext4(转)
  3. 软件著作权登记证书申请攻略
  4. 制冷设备维保常见的10大故障!
  5. 添加白名单_上网行为管理如何添加网站白名单(包括https网站)
  6. ext显示服务器文件,使用linux的fsck.ext2命令检查及修复ext2文件系统
  7. 遮罩层中的相对定位与绝对定位(Ajax)
  8. PHP钥匙导航源码-社区导航双端自适应Typecho模板
  9. 性能 1.84 倍于 Ceph!网易数帆开源分布式存储系统 Curve
  10. 霍邱一中2021高考成绩查询入口,2021六安高考成绩查询系统
  11. 兄弟,学点AI吗?2知识的确定性系统
  12. Java实现zip文件压缩与解压缩--附完整代码
  13. java 打印 日历 详细 注解_Java实现按年月打印日历功能【基于Calendar】
  14. 厉害了,Pandas表格还能五彩斑斓的展示数据,究竟是怎么做到的呢?
  15. matplotlib显示宋体和Times New Roman
  16. IllegalStateException: Failed to introspect annotated methods on class org.springframework.boot.web.
  17. springboot毕设项目东莞汉庭酒店的酒店管理系统的设计与实现4ccnv(java+VUE+Mybatis+Maven+Mysql)
  18. 数据库初级入门sqlite3版本
  19. oracle的date_add,SQL Server 中add函数到 oracle date add的操作
  20. 浅析贝叶斯神经网络(Based on Variational Bayesian)

热门文章

  1. Percona-XtraDB-Cluster 5.7版本(PXC)集群部署
  2. C#LeetCode刷题-栈
  3. mysql基本功能+show+innodb+索引+慢sql+explain
  4. github在线执行_什么是Github操作,如何自动执行测试和Slack通知?
  5. 风变编程课 囚徒困境 答案_当您对所有这些有用的在线编程课程感到不知所措时,如何摆脱困境...
  6. regexbuddy使用记录
  7. simulink模块的输入端口与参数的关系
  8. Python爬虫进阶必备 | X中网密码加密算法分析
  9. Linux编辑只读文件
  10. Logistic Regression逻辑回归的损失函数与梯度下降训练