模板—扩展GCD*2
有必要重新学一下扩展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相关推荐
- 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, ...
- 扩展gcd codevs 1200 同余方程
codevs 1200 同余方程 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 求关 ...
- UESTC 288 青蛙的约会 扩展GCD
设两只青蛙跳了t步,则此时A的坐标:x+mt,B的坐标:y+nt.要使的他们在同一点,则要满足: x+mt - (y+nt) = kL (p是整数) 化成: (n-m)t + kL = x-y (L ...
- GCD,快速GCD,扩展GCD
/*==================================================*\ | GCD 最大公约数 \*=============================== ...
- POJ 1061 青蛙的约会(扩展GCD求模线性方程)
题目地址:POJ 1061 扩展GCD好难懂..看了半天,终于把证明什么的都看明白了..推荐一篇博客吧(戳这里),讲的真心不错.. 直接上代码: #include <iostream> # ...
- 2021-03-10 模板扩展类调用模板基类成员函数
侯捷书内 : 扩展模板类 内通过 this-> 指模板基类的成员函数,或通过 基类名:: 的方式调用 基类成员函数 侯捷书内说: 扩展模板类,找不到模板基类的成员函数 但是在vs201 ...
- GCD及其扩展GCD详解
转自:http://www.cnblogs.com/yuelingzhi/archive/2011/08/13/2137582.html 扩展欧几里德算法-求解不定方程,线性同余方程. 设过s步后两青 ...
- (扩展)欧几里德快速幂
GCD模板 __int64 gcd(__int64 a,__int64 b) {return b==0? a:gcd(b,a%b); } 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数 ...
- 数论读书笔记——欧几里得和扩展欧几里得
欧几里得: 欧几里得算法: 定理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, ...
最新文章
- Spring Cloud架构的各个组件的原理分析
- kml 解析 java_KML文件解析显示在地图
- python简单代码 春节集五福-新年福利来一波之Python轻松集齐五福(demo)
- Eboot.bib中0x30000000到0x300020000内存的作用
- 500 OOPS: vsftpd: both local and anonymous access disabled
- [刷题]算法竞赛入门经典(第2版) 5-2/UVa1594 - Ducci Sequence
- matlab卷积画图,基于MATLAB的卷积演示系统课程设计
- 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(2月27日-3月4日)
- android 屏幕方向监听,android 屏幕旋转问题 - jwzhangjie的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- Android的系统架构
- REC Solar推出黑色多晶半切片PERC组件,已进入量产化
- python实战项目(Django技术点)
- 如何利用python3创建数据表_大数据分析如何利用Python创建数据透视表
- PS矩形选择框基础操作
- 信号反射问题与相关电路设计技巧
- 树莓派4B系统搭建(超详细版)
- win 7系统微信如何用代理服务器,win7系统电脑上使用微信的操作方法
- python中apply函数的使用
- [原创]IBM BLM模型思维导图
- 网易邮箱服务器邮箱协议,怎么用网易闪电邮IMAP协议同步网页邮箱?
热门文章
- ORA-07445导致实例崩溃的解决【The solution of instance crush by ORA-07445】
- iOS 关于.tbd与.dylib用法
- Ubuntu下安装配置Hadoop独立模式和伪分布式
- VMware Server使用经验记录
- 跟我学XSL(二) -XSL的运算符
- Baidu小窥(一)
- 【正一专栏】马蓉到底对王宝强还有啥感情?
- 真正的编程高手-----激励计算机专业的大学生
- linux sh 字符截取,shell字符截断
- 线程的创建与启动——Thread 类有两个常用的构造方法:Thread()与 Thread(Runnable)||多线程运行结果是随机的