二元线性不定方程和模线性方程

二元线性不定方程:

有方程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 }
View Code

 

转载于:https://www.cnblogs.com/SXia/p/6790128.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值