QAQ真的不能再尴尬了。。。
现在做出来的代码poj能过。但是有的oj是过不了的。。。
然后就是。那个
(x%b+b)%b是用来求最小解的
但是代码后面好像是必须得加上t==0或者t<=0?不知道TAT不加可能也能过
然后就是t=t*c/gys如果先/后*是过不了的。。。绝望。。好迷啊
等过两天状态好了再来看吧
扩展欧几里得定理没什么好说的
#include<stdio.h>
#include<string.h>
long long x1,y1,m,n,l,t,k;
long long gcd(long long a,long long b)
{
if(b==0) return a;
return gcd(b,a%b);
}
void exgcd(long long a,long long b,long long &x,long long &y)
{
long long temp;
if(b==0)
{
x=1;
y=0;
return;
}
exgcd(b,a%b,x,y);
temp=x;
x=y;
y=temp-a/b*y;
}
int main()
{
scanf("%lld%lld%lld%lld%lld",&x1,&y1,&m,&n,&l);
long long a,b,c,gys;
a=n-m;
b=l;
c=x1-y1;
gys=gcd(a,b);
//printf("gys%lld\n",gys);
if(c%gys!=0){
printf("Impossible\n");
return 0;
}
else{
exgcd(a,b,t,k);
t=t*c/gys;
/* a=a/gys;
b=b/gys;
c=c/gys;
exgcd(a,b,t,k);
t=t*c;*/
t=(t%b+b)%b;
if(t<=0)
t=t+l;
printf("%lld\n",t);
return 0;
}
}