扩展欧几里得求解ax+by=c的特殊解(模板)
生活随笔
收集整理的這篇文章主要介紹了
扩展欧几里得求解ax+by=c的特殊解(模板)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自:https://www.cnblogs.com/033000-/p/10040183.html
template<class T> void exgcd(T a,T b,T &d,T &x,T &y){if(!b) {d=a;x=1;y=0;}else {exgcd(b,a%b,d,y,x);y-=x*(a/b);} } //求解二元一次方程 a*x+b*y=c,一組解為x,y,無解則返回false template<class T> bool Solve_equation(T a,T b,T c,T &x,T& y){T gcd;exgcd(a,b,gcd,x,y);if(c%gcd) return false; //無解T k=c/gcd;x*=k;y*=k;T xplus=b/gcd,yplus=a/gcd; if(xplus<0) xplus*=-1;if(yplus<0) yplus*=-1;//此時求出的x,y即為一組解,該方程的通解形式為X=x+t*(b/gcd),Y=y-t*(a/gcd) t為任意正整數//根據題目要求我們需要構造特殊解//x=(x%xplus+xplus)%xplus;y=(c-a*x)/b; //x的最小正整數解//y=(y%yplus+yplus)%yplus;x=(c-b*y)/b; //y的最小正整數解return true; }?
總結
以上是生活随笔為你收集整理的扩展欧几里得求解ax+by=c的特殊解(模板)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客多校3 - Operation Lo
- 下一篇: 牛客多校3 - Fraction Con