有必要重新学一下扩展GCD emmmm。

主要是扩展GCD求解线性同余方程$ax≡b (mod p)$。

1.方程有解的充分必要条件:b%gcd(a,p)=0。

  证明:

  • $ax-py=b$
  • 由于求解整数解,ax是gcd(a,p)的整数倍,py也是,所以b是gcd(a,p)的整数倍。

2.扩展GCD模板

int exgcd(int a,int b,int &x,int &y)
{if(b==0){x=1,y=0;return a;}//注意x,y的赋值。int gcd=exgcd(b,a%b,x,y),t=x;x=y;y=t-a/b*y;return gcd;
}

3.求解线性同余方程:

扩展欧几里得可以求解形如$ax-py=b$的解。

方程可化为$ax≡b (mod p)$,注意b和p的位置。

令t=gcd(a,p)。方程可化为$\frac {a}{t}x-\frac{p}{t}y=\frac{b}{t}$。exgcd求出$\frac {a}{t}x-\frac{p}{t}y=1$的一组特解x,y。$x*=b/t,y*=b/t$即可求出一组解。

而要求最小整数解,可以发现如果x减p,y加a等式仍然成立,所以最小整数解为(x%p+p)%p.

int GCD(int a,int b){return !b?a:GCD(b,a%b);}
int exgcd(int a,int b,int &x,int &y)
{if(b==0){x=1,y=0;return a;}int gcd=exgcd(b,a%b,x,y),t=x;x=y;y=t-a/b*y;return gcd;
}
int fcc(int a,int b,int p)
{   int x,y,t=GCD(a,p);if(b%t)return -1;int tem=b/t;a/=t,p/=t;exgcd(a,p,x,y);x*=tem,y*=tem;return (x%p+p)%p;
}

转载于:https://www.cnblogs.com/Al-Ca/p/11353711.html

模板—扩展GCD*2相关推荐

  1. POJ-2065 SETI 高斯消元,扩展GCD

    该题题义是给定如下一个方程组: F(1) = C1 (mod) P F(2) = C2 (mod) P F(3) = C3 (mod) P ... 其中F(1) = A(1,1)*x1 + A(1, ...

  2. 扩展gcd codevs 1200 同余方程

    codevs 1200 同余方程 2012年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 求关 ...

  3. UESTC 288 青蛙的约会 扩展GCD

    设两只青蛙跳了t步,则此时A的坐标:x+mt,B的坐标:y+nt.要使的他们在同一点,则要满足: x+mt - (y+nt) = kL (p是整数) 化成: (n-m)t + kL = x-y (L ...

  4. GCD,快速GCD,扩展GCD

    /*==================================================*\ | GCD 最大公约数 \*=============================== ...

  5. POJ 1061 青蛙的约会(扩展GCD求模线性方程)

    题目地址:POJ 1061 扩展GCD好难懂..看了半天,终于把证明什么的都看明白了..推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> # ...

  6. 2021-03-10 模板扩展类调用模板基类成员函数

    侯捷书内 : 扩展模板类 内通过  this->  指模板基类的成员函数,或通过   基类名::  的方式调用 基类成员函数 侯捷书内说: 扩展模板类,找不到模板基类的成员函数 但是在vs201 ...

  7. GCD及其扩展GCD详解

    转自:http://www.cnblogs.com/yuelingzhi/archive/2011/08/13/2137582.html 扩展欧几里德算法-求解不定方程,线性同余方程. 设过s步后两青 ...

  8. (扩展)欧几里德快速幂

    GCD模板 __int64 gcd(__int64 a,__int64 b) {return b==0? a:gcd(b,a%b); } 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数 ...

  9. 数论读书笔记——欧几里得和扩展欧几里得

    欧几里得: 欧几里得算法: 定理1:整数a≥b>0,令r0=a,r1=b如果我们做带余除法得到rj=r(j+1)q(j+1)+r(j+2),且0<r(j+2)<r(j+1),j=0, ...

最新文章

  1. Spring Cloud架构的各个组件的原理分析
  2. kml 解析 java_KML文件解析显示在地图
  3. python简单代码 春节集五福-新年福利来一波之Python轻松集齐五福(demo)
  4. Eboot.bib中0x30000000到0x300020000内存的作用
  5. 500 OOPS: vsftpd: both local and anonymous access disabled
  6. [刷题]算法竞赛入门经典(第2版) 5-2/UVa1594 - Ducci Sequence
  7. matlab卷积画图,基于MATLAB的卷积演示系统课程设计
  8. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(2月27日-3月4日)
  9. android 屏幕方向监听,android 屏幕旋转问题 - jwzhangjie的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  10. Android的系统架构
  11. REC Solar推出黑色多晶半切片PERC组件,已进入量产化
  12. python实战项目(Django技术点)
  13. 如何利用python3创建数据表_大数据分析如何利用Python创建数据透视表
  14. PS矩形选择框基础操作
  15. 信号反射问题与相关电路设计技巧
  16. 树莓派4B系统搭建(超详细版)
  17. win 7系统微信如何用代理服务器,win7系统电脑上使用微信的操作方法
  18. python中apply函数的使用
  19. [原创]IBM BLM模型思维导图
  20. 网易邮箱服务器邮箱协议,怎么用网易闪电邮IMAP协议同步网页邮箱?

热门文章

  1. ORA-07445导致实例崩溃的解决【The solution of instance crush by ORA-07445】
  2. iOS 关于.tbd与.dylib用法
  3. Ubuntu下安装配置Hadoop独立模式和伪分布式
  4. VMware Server使用经验记录
  5. 跟我学XSL(二) -XSL的运算符
  6. Baidu小窥(一)
  7. 【正一专栏】马蓉到底对王宝强还有啥感情?
  8. 真正的编程高手-----激励计算机专业的大学生
  9. linux sh 字符截取,shell字符截断
  10. 线程的创建与启动——Thread 类有两个常用的构造方法:Thread()与 Thread(Runnable)||多线程运行结果是随机的