青蛙的约会

// exgcd,注意最后面求出最小解的公式...还有就是判断有没有解,还有就是把正负颠倒一下...

#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
ll x,y,m,n,l;
ll exgcd(ll a,ll b,ll& xx,ll& yy){
 if(!b){
  xx=1; yy=0;
  return a;
 }
 ll res=exgcd(b,a%b,xx,yy);
 ll t=xx;
 xx=yy;
 yy=t-(a/b)*yy;
 return res;
}
int main(){
 ll x,y,m,n,l;
 cin>>x>>y>>m>>n>>l;
 if(n-m<0) swap(m,n),swap(x,y);
 ll xx,yy;
 int w=exgcd(n-m,l,xx,yy);
 if((x-y)%w!=0){
  printf("Impossible");
 }
 else{
  printf("%lld\n",((x-y)/w*xx%(l/w)+(l/w))%(l/w));
 }
 return 0;
}

你可能感兴趣的:(数论专题,noip冲刺复习)