POJ1061 青蛙的約會

擴展歐幾里得。 

幾個很弱智的錯誤點。

1、exgcd的引用“&”

2、當用p,q代替exgcd的x,y時,遞歸時仍然寫的x,y

3、遞歸時忘了交換x,y位置

4、解是c/d*p,不要忘了/d。

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll l,x,y,m,n;
ll exgcd(ll a,ll b,ll &p,ll &q)
{
    if(b==0)
    {
        p=1,q=0;
        return a;
    }
    ll d=exgcd(b,a%b,q,p);
    q-=(a/b)*p;
    return d;
}
int main()
{
    while(cin>>x>>y>>m>>n>>l)
    {    
        if(m<n) 
        {
            swap(m,n);
            swap(x,y);
        }
        ll p,q;
        ll d=exgcd(m-n,l,p,q),c=((y-x)%l+l)%l,k=l/d;
        if(c%d!=0) cout<<"Impossible"<<endl;
        else cout<<(c/d*p%k+k)%k<<endl;
    }
}

 

發佈了74 篇原創文章 · 獲贊 4 · 訪問量 5040
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章