您的位置:首页 > 其它

POJ 1061 青蛙的约会 | 同余方程和exGcd

2017-11-26 14:26 253 查看

题解:

要求s+px=t+qx (mod L)

移项 (p-q)x=t-s (mod L)

等价于 (p-q)x+Ly=t-s

即ax+by=c的方程最小非负根

exGcd后乘个C

1 #include<cstdio>
2 typedef long long ll;
3 using namespace std;
4 ll s,t,p,q,L;
5 ll gcd (ll x,ll y)
6 {
7     return y==0?x:gcd(y,x%y);
8 }
9 ll exGcd(ll a,ll b,ll &x,ll &y)
10 {
11     if (b==0) return x=1,y=0,a;
12     ll r=exGcd(b,a%b,y,x);
13     y-=(a/b)*x;
14     return  r;
15 }
16 int main()
17 {
18     scanf("%lld%lld%lld%lld%lld",&s,&t,&p,&q,&L);
19     ll a=(p-q+L)%L,b=L,c=(t-s+L)%L,x,y,G=gcd(a,b);
20     if (c%G!=0)
21     {
22     puts("Impossible");
23     return 0;
24     }
25     a/=G,b/=G,c/=G;
26     exGcd(a,b,x,y);
27     x=(x%b+b)%b;
28     x=x*c%b;
29     printf("%lld\n",x);
30     return 0;
31 }

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: