首页 > 其他 > 详细

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

时间:2017-11-26 15:37:51      阅读:272      评论:0      收藏:0      [点我收藏+]

题解:

要求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

原文:http://www.cnblogs.com/mrsheep/p/7898952.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!