POJ 1061 青蛙的约会 | 同余方程和exGcd
Posted MSPqwq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1061 青蛙的约会 | 同余方程和exGcd相关的知识,希望对你有一定的参考价值。
题解:
要求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 }
以上是关于POJ 1061 青蛙的约会 | 同余方程和exGcd的主要内容,如果未能解决你的问题,请参考以下文章
POJ 1061 - 青蛙的约会 - [exgcd求解一元线性同余方程]