分析:
可以得出
(
n
−
m
)
t
≡
x
−
y
(
m
o
d
(n-m)t≡x-y(mod
(n−m)t≡x−y(mod
l
)
l)
l)
转换一下 就变成求
(
n
−
m
)
t
+
k
l
=
x
−
y
(n-m)t+kl=x-y
(n−m)t+kl=x−y的
t
t
t的最小非负数整数解
那这就是个不定方程 求最小非负整数解 那就
e
x
g
c
d
exgcd
exgcd
然后注意
n
−
m
n-m
n−m和
x
−
y
x-y
x−y可能为负数
e
x
g
c
d
exgcd
exgcd不能做负数 就处理一下
最后最小非负整数解 处理负数
以及同余方程最后求解
m
o
d
mod
mod的
b
b
b要变成
b
/
g
b/g
b/g
x
0
,
g
x0,g
x0,g是
e
x
g
c
d
exgcd
exgcd中的一组特解
CODE:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
ll n,m,x,y,l,xO,yO,g;
void exgcd(ll a,ll b)
{
if(b==0){
xO=1;
g=a;
return;
}
exgcd(b,a%b);
ll k=xO;
xO=yO;
yO=k-a/b*yO;
}
int main()
{
scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l);
ll a=n-m,b=l,c=x-y;
if(a<0){a=-a;c=-c;}
exgcd(a,b);
if(c%g) puts("Impossible");
else printf("%lld",(c/g*xO%(b/g)+b/g)%(b/g));
return 0;
}