乘法逆元应用在组合数学取模问题中,这里给出的实现不见得好用

给出拓展GCD算法:

扩展欧几里得算法是指对于两个数a,b
一定能找到x,y(均为整数,但不满足一定是正数)
满足x*a+y*b=gcd(a,b)
gcd(x,y)是指x 与 y的最大公约数

有啥用呢?求解形如 a*x +b*y = c 的通解

然后我们先介绍同余方程,再介绍乘法逆元

同余方程
a≡b(mod m) 等价于小学的运算式 b÷m 余数为a
也就是a mod m=b

其实介绍这个就是看怎么把≡拿掉

乘法逆元
ax ≡ (mod m)
我们称 x 是 a 关于 m 的乘法逆元
可以等价于这样的表达式: a*x + m*y =

当满足这个式子的时候:a*x + b*y = c 有解的充要条件: c % gcd(a , b) == 0

一般,我们能够找到无数组解满足条件,但是一般是让你求解出最小的那组解

我们求解出来了一个特殊的解 x0 ,我们用 x0 % m其实就得到了最小的解了

 #include<cstdio>
using namespace std;
inline long long read()
{
long long x=,f=;char ch=getchar();
while(ch<''||ch>'') {if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int a,b;
void exgcd(int a,int b,int &x,int &y)
{
if(b==) {x=;y=;return;}
exgcd(b,a%b,x,y);
int t=x;x=y;y=t-a/b*y;
}
//ax ≡ 1 (mod b)
//-> a*x + b*y = 1
//->求出x和y后让x%b就是最小解了
int main()
{
a=read();b=read();
int x,y;
exgcd(a,b,x,y);
x=(x%b+b)%b;
printf("%d",x);
return ;
}

最新文章

  1. Spring boot 学习记录
  2. loadView、viewDidLoad、viewWillAppear、viewDidAppear等详解
  3. label与input间距的小问题
  4. BZOJ1443: [JSOI2009]游戏Game
  5. Java程序设计 实验三
  6. 回文串---Best Reward
  7. elasticsearch索引的增删改查入门
  8. MySQL的诡异同步问题-重复执行一条relay-log
  9. Hadoop Balance
  10. JAVA 静态代码块
  11. asp.net从一个页面的单击按钮事件控制另一个页面的刷新
  12. 一次完整的http请求所需要完成的步骤
  13. Android Environment 判断sd卡是否挂载 获取sd卡目录
  14. UVA_Cubic Eight-Puzzle UVA 1604
  15. Hibernate学习
  16. windows身份验证无法登陆,错误: 18456
  17. Collections.sort的两种用法
  18. 201521123065《Java程序设计》第1周学习总结
  19. hdu1754线段树的单点更新区间查询
  20. layui框架--关闭当前页面并刷新父页面

热门文章

  1. CSS3单选动画
  2. Fluentd插件使用方法
  3. linux下安装redis及主从配置
  4. url解析字符串
  5. this.getClass().getResource()示例详解
  6. PAT 甲级 1015 Reversible Primes
  7. 【SSH】——梳理三大框架
  8. java enum naming rules &amp; Pascal case, Camel case, Uppercase
  9. oracle补充
  10. 【bzoj2659】[Beijing wc2012]算不出的算式 数论