1.目的要求:
(1)理解并尝试证明扩展欧几里得算法
(2)练习从题目中抽象出计算方程的能力
(2)利用扩展欧几里得算法解决Online Judge上面的题目
2.实验内容:
(1)青蛙A和青蛙B,从纬度线上东经0度处,由东往西,单位长度1米,起跳。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。 现在要你求出它们跳了几次以后才会碰面。 -来源HDU1285
3.实验报告:
#include<iostream>
using namespace std;
typedef long long LL;
typedef double DB;
LL e_gcd(LL a,LL b,LL &x,LL &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
LL ans=e_gcd(b,a%b,x,y);
LL temp=x;
x=y;
y=temp-a/b*y;
return ans;
}
LL cal(LL a,LL b,LL c)
{
LL x,y;
LL gcd=e_gcd(a,b,x,y);
if(c%gcd!=0)
{
return -1;
}
x*=c/gcd;
b/=gcd;
if(b<0)
{
b=-b;
}
LL ans=x%b;
if(ans<=0)
{
ans+=b;
}
return ans;
}
int main()
{
LL x,y,m,n,L;
cin >> x >> y >> m >> n >> L;
LL ans=cal(m-n,L,y-x);
if(ans==-1)
{
cout<<"Impossible"<<endl;
}
else
{
cout<<ans<<endl;
}
return 0;
}