Description
我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。
Input
Output
Sample Input
1 2 3 4 5
Sample Output
4
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
long long t,p;
long long euclid(long long a,long long b)
{
if(b==0)
return a;
else
return euclid(b,a%b);
}//辗转相除法
void extended_euclid(long long a,long long b)
{
if(b==0)
{
t=1;
p=0;
}
else
{
long long it;
extended_euclid(b,a%b);
it=t-a/b*p;
t=p;
p=it;
}
}
int main()
{
long long x,y,m,n,L,gcd;
cin>>x>>y>>m>>n>>L;
if(m==n)
{
cout<<"Impossible"<<endl;
return 0;
}
long long a,b,c,c1;
a=n-m;
b=L;
c=x-y;
gcd=euclid(a,b);
c1=c%gcd;
if(c1!=0)
{
cout<<"Impossible"<<endl;
return 0;
}
c/=gcd;
a/=gcd;
b/=gcd;
extended_euclid(a,b);
t*=c;
p*=c;
t=(t%b+b)%b;
cout<<t<<endl;
return 0;
}
数论这个东西。。。全是听老师上课讲的,听得云里雾里的,自己本身其实不是特别深入了解。。。但是顺着推导过程感觉一切还是挺自然的。。。附几张图解吧 (参考网上的图片)