点击打开链接http://poj.org/problem?id=1061
#include <iostream>
#include <algorithm>
using namespace std;
__int64 t,p,d;
void exgcd(__int64 a,__int64 b)
{
if(b==0)
{
t=1;
p=0;
d=a;//gcd
}
else
{
exgcd(b,a%b);
__int64 tmp;
tmp=t;
t=p;
p=tmp-(a/b)*p;
}
}
int main()
{
__int64 x,y,m,n,l; // t秒后能相遇 (x+mt)modl = (y+nt)modl
cin>>x>>y>>m>>n>>l; // 即x+mt ≡y+nt (mod l)
// pl=x+mt-y-nt -> (n-m)t+pl=x-y;
//可以先求出 (n-m)t1+lp1=gcd(n-m,l)
exgcd(n-m,l); //如果 d|(x-y) 则 t=t1*((x-y)/d)
if((x-y)%d) // t=(t%(l/d)+l/d)%(l/d); (没看懂)
{
cout<<"Impossible"<<endl;
}
else
{
__int64 k=(x-y)/d;
t=t*k;
t=(t%(l/d)+l/d)%(l/d); // 不懂...
cout<<t<<endl;
}
return 0;
}