扩展欧几里得 求解不定方程和逆元
2017-09-29 16:14
225 查看
好气啊,本来写完了一篇关于gcd,exgcd相关证明的声情并茂的文章;
结果,手残……关了……没保存……QAQ,所以不想再详细写一篇了,百度有很多;
2.中国剩余定理……;
证明:
https://www.baidu.com/自行百度;
小学数学相关内容:
a是b的倍数(b是a的约数),a可以被b整除(b可以整除a);
前提:
c mod gcd(a,b)=0;
证明:
很简单,
若ax+by=c有解;
因为
a mod gcd(a,b)=0,
b mod gcd(a,b)=0;
所以
ax+by一定被gcd(a,b)整除;
所以
c一定被gcd(a,b)整除;
求得ax+by=gcd(a,b)的解x0,y0;
显然,ax+by=c的解:
x1=x0*c/gcd(a,b);
y1=y0*c/gcd(a,b);
但是只能求解一组解,怎么求解多组解呢?
x2=x1+b/gcd(a,b)*t;
y2=y1-a/gcd(a,b)*t;
原因:
除gcd是为了防止漏解,因为a,b不一定互质;
t为任意实数;
=> ax+by=1;
x是a关于b的逆元;
exgcd求解~;
K.O
NOIP 2017 RP ++!
神犇链接:http://blog.csdn.net/clove_unique/article/details/53135707
结果,手残……关了……没保存……QAQ,所以不想再详细写一篇了,百度有很多;
exgcd
1.求解同余方程,不定方程,逆元;2.中国剩余定理……;
证明:
https://www.baidu.com/自行百度;
小学数学相关内容:
a是b的倍数(b是a的约数),a可以被b整除(b可以整除a);
不定方程:
ax+by=c;前提:
c mod gcd(a,b)=0;
证明:
很简单,
若ax+by=c有解;
因为
a mod gcd(a,b)=0,
b mod gcd(a,b)=0;
所以
ax+by一定被gcd(a,b)整除;
所以
c一定被gcd(a,b)整除;
求得ax+by=gcd(a,b)的解x0,y0;
显然,ax+by=c的解:
x1=x0*c/gcd(a,b);
y1=y0*c/gcd(a,b);
但是只能求解一组解,怎么求解多组解呢?
x2=x1+b/gcd(a,b)*t;
y2=y1-a/gcd(a,b)*t;
原因:
除gcd是为了防止漏解,因为a,b不一定互质;
t为任意实数;
#include<iostream> using namespace std; int x,y; int exgcd(int a,int b,int &x,int &y) { int r,k; if(!b) {x=1,y=0;return a;} r=exgcd(b,a%b,x,y); k=x,x=y,y=k-a/b*y; return r; } int hh(int a,int b,int c) { int d=exgcd(a,b,x,y); if(c%d) return 0; int k=c/d; x*=k; y*=k; return d; } void solve() { int a,b,c,k,cnt=1; cin>>a>>b>>c; if(k=hh(a,b,c))//若有解; { cout<<cnt<<" : "<<x<<" "<<y<<endl; while(cnt++) { x+=b/k*cnt,y=y-a/k*cnt; cout<<cnt<<" : "<<x<<" "<<y<<endl; if(cnt==10) cnt=0; } } } int main() { solve(); return 0; }
逆元:
ax=1(mod b)=> ax+by=1;
x是a关于b的逆元;
exgcd求解~;
K.O
总结:
noip的数论并不是很难,关键是多动手写写,不要光想;NOIP 2017 RP ++!
神犇链接:http://blog.csdn.net/clove_unique/article/details/53135707
相关文章推荐
- (数论)整数二元一次不定方程(扩展欧几里得求解)
- POJ - 2142 The Balance(扩展欧几里得求解不定方程)
- 【HDU 3037】大数组合取模之Lucas定理+扩展欧几里得求逆元与不定方程一类问题
- 数论之拓展欧几里得求解不定方程和同余方程组(一)
- 扩展gcd求解二元不定方程及其证明
- 扩展欧几里得(求解线性方程)
- zoj 3609 Modular Inverse 求最小逆元 裸的的扩展欧几里得
- [OpenJudge-NOI]不定方程求解 扩展欧几里德
- nyoj-Color the necklace(Ploya定理 + 欧拉函数 + 扩展欧几里得(求逆元))
- poj 1061 青蛙的约会(扩展欧几里得解不定方程)
- 中国剩余定理+扩展欧几里得求逆元 hdu 1006
- 扩展欧几里得应用解不定方程(uva12169,Disgruntled Judge,NWERC 2008)
- 扩展欧几里得与逆元
- 一次同余式的求解(扩展欧几里得)
- gcd模板(欧几里得与扩展欧几里得、拓展欧几里得求逆元)
- hdu1576 A/B 扩展欧几里得求逆元
- poj 2115 (扩展欧几里得,二元不等式求解)
- hdoj 1576 A/B [扩展欧几里得.逆元]
- 扩展欧几里得求逆元
- [置顶] 浅析逆元、扩展欧几里得、类欧几里得和莫比乌斯反演(填坑ing)