![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
扩展欧几里得
文章平均质量分 87
Big_Rui
这个作者很懒,什么都没留下…
展开
-
The Balance 扩展欧几里得
题意:给定a,b,c;求a*x+b*y=c; 思路:典型的 扩展欧几里得,主要是如何求最小和; a*x+b*y=c,特解x0,y0。 通解 x=x0+b/gcd*t ; y=y0-a/gcd*t ;|x|+|y|=|x0+b/gcd*t |+|y0-a/gcd*t |, 令a>b(如果不是,交换),因为y的减少大于x的增长,所以当t=y0/(a/gcd)时,和最小。 如果不能整除,也是原创 2017-09-03 18:25:50 · 257 阅读 · 0 评论 -
ZOJ3609 Modular Inverse 扩展欧几里德算法
题意:给定a,m,求a=1(mod m) 思路:典型的求乘法逆元,但是WA了五次,因为x要是正数,不能是0,坑死我了 #include #include #include using namespace std; int egcd(int a,int b,int &x,int &y) { if(b==0){ x=1;y=0; return a;原创 2017-09-04 16:36:27 · 260 阅读 · 0 评论 -
hdoj 2669 Romantic 【扩展欧几里得 求解最小非负解】
题意:给定a,b,求想x,y使a*x+b*y=1; 思路;扩展欧几里得求乘法逆元,x好求,主要是y,直接y=1-a*x; 一开始想到了x=x0+b*t;y=y0-a*t;算t,发现比较麻烦,还是直接算来的方便 #include #include #include using namespace std; typedef long long ll; ll egcd(ll a,ll b,ll原创 2017-09-04 20:09:51 · 458 阅读 · 0 评论 -
X问题 扩展欧几里得
题意: #include #include #include #include using namespace std; typedef long long ll; ll egcd(ll a,ll b,ll &x,ll &y) { if(b==0){ x=1;y=0; return a; } ll d=egcd(b,a%b,y,x原创 2017-09-04 23:47:55 · 293 阅读 · 0 评论 -
ZOJ - 3593 One Person Game 扩展欧几里得 技巧
题意:给定两个点A,B,和a,b;c=a+b。由A走到B,每步可以向左或向右走a,b,c,,步;求最小步数 思路:ax+by+cz=B-A ==> a(x+z)+b(y+z)=B-A ==> ax+by=B-A 当x0,y0同号时,步数=x0+y0-min(x0,y0)(转化成走c步)=max(x0,y0) 当x0,y0异号时,步数=abs(x0)+abs(y0)(无法转化成走c步) 正确原创 2017-09-06 09:22:52 · 406 阅读 · 0 评论 -
Strange Way to Express Integers 扩展欧几里得
题意: 给定数组数据a1,r1,a2,r2,使得存在x,x%a1=r1,x%a2=r2,求出最小的x,没有输出-1; 扩展欧几里得的定义自己去网上搜搜,我这讲一些公式的推导。 设 a1*k1+ a2*k2= gcd(a,b); 会求解出特解k1,k2 通解:k1'=k1+a2/gcd*t(t是任意整数);k2'=k1-a1/gcd*t(t是任意整数) 注意一点:当k1%(原创 2017-09-03 09:36:34 · 275 阅读 · 0 评论