话说西汉时期,汉武帝刘彻派遣张骞出使西域,欲同月氏国结交而共驱匈奴。同时,月氏国也欲同大汉结交,也派出使者康破伦出使大汉,可是因为月氏国对于大汉的认知甚少,康破伦同样向西出使大汉。一开始,张骞从大汉出发,康破伦从月氏国出发,两人都在同一纬度线上,张骞所处的经度为x,康破伦所处的经度为y;接下来,两人同时向西走,而且只能向西走,张骞每天走m公里,康破伦每天走n公里,且每天走路的速度不变,也不停下来休息;这样两人就在这一条长为L的纬度线上一直向西走。问:过了多少天之后张骞和康破伦会碰面,并磋商两国结交之事(所谓碰面,是指两人处在同一经度上)。
这下,康熙犯难了,他还是个不大的青年,怎么可能做得出这么难的题目;但是,他又是统领全国的帝皇,怎么能在老师面前丢这么大一个面子。康熙想:不行!一定得把这个题做出来!(然后就有了下面这段记录)
第一天,……
第二天,…………
第三天,………………
第四天,……………………
第五天,…………………………
第六天,………………………………
第七天,……………………………………!!!!!!!
啊!第七天,康熙终于打了7个感叹号,得出了一个重要的结论!!!!!那就是——做不出来。(汗),没办法,他只有请教你,他的挚友,帮他解决这一难题。康熙答应你,如果你把这一题做出来了,你将得到御赐赏银一万万两!
-
。为了改变你生活的现状——衣衫褴褛、闻鼠起舞、蟑螂为伴,你下定了决心——我一定得把这题解决!
输入只包括一行5个整数x,y,m,n,L 其中0< x≠y < =2000000000,0 < m、n < =2000000000,0 < L < =2100000000。
输出碰面所需要的天数,如果永远不可能碰面则输出一行" Impossible" 。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
ll A, B, m, n, l, x, y;
ll exgcd(ll a, ll b, ll&x, ll&y) {
if(b == 0) {
x = 1; y = 0; return a;
} ll d = exgcd(b, a % b, y, x);
y -= (a / b) * x; return d;
}
int main() {
scanf("%lld%lld%lld%lld%lld", &A, &B, &m, &n, &l);
ll tm1 = B - A, tm2 = m - n, d;
if(tm1 < 0) {
tm1 = -tm1; tm2 = - tm2;
}
if(tm2 < 0) {
d = exgcd(-tm2, l, x, y);
x = -x;
} else d = exgcd(tm2, l, x, y);
if(tm1 % d) printf("Impossible\n");
else {
ll r = l / d;
x = ((x * (tm1 / d)) % r + r) %r;
printf("%lld\n", x);
}
return 0;
}