http://poj.org/problem?id=1061
傻逼题不多说
(x+km) - (y+kn) = dL 求k
令b = n-m ; a = x - y ;
化成模线性方程一般式 : Lx+by=a 再除gcd化简成最简形式 使得L,b互素 (即构造 L'x+b'y =1)
求Ex_GCD得到 y * a 就是最后的答案...还是一样要化成正整数形式
pair<LL,LL> ex_gcd(LL a,LL b){ if(b == 0) return make_pair(1,0); pair<LL,LL> t = ex_gcd(b,a%b); return make_pair(t.second , t.first - (a / b) * t.second); } int main() { LL x,y,n,m,L; cin>>x>>y>>m>>n>>L; LL a = x - y; LL b = n - m; LL c = gcd(L,b); if(a % c != 0 || n == m) { cout<<"Impossible"<<endl; return 0; } pair<LL,LL> p = ex_gcd(L/c,b/c); LL res = p.second * (a/c); res = (res%L + L)%L; cout<<res<<endl; return 0; }