二元線性不定方程:
有方程ax+by=c;首先必須滿足d=gcd(a,b)|c;否則無解。
所以我們可以用擴歐求出一組關於d特解:ax0'+by0'=d;
所以有特解x0=x0'/d*c,y0=y0'/d*c;
然后我們可以知道a/d(x1-x2)=b/d(y2-y1),b/d|(x1-x2),a/d|(y2-y1);
所以有通解:(x0+k*b/d,y0-k*a/d)。
模線性方程:
ax=b(mod c);變成ax+cy=b;同上可以求出特解和通解;
1 #define ll long long 2 ll e_gcd(ll a,ll b,ll &x,ll &y){ 3 if (b==0){ 4 x=1; y=0; return a; 5 } 6 int d=e_gcd(b,a%b,x,y); 7 int t=x; x=y; 8 y=t-(a/b)*y; 9 return d; 10 } 11 void solve(ll a,ll b,ll c){ 12 ll x_,y_,d=e_gcd(a,c,x_,y_); 13 if (b%d==0){ 14 printf("%lld",((x_*b/d)%c+c)%c); 15 } else printf("Impossible"); 16 }
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。