POJ 1061 青蛙的约会 数论水题

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;
}

 

posted @ 2013-08-17 20:34  Felix_F  阅读(192)  评论(0编辑  收藏  举报