NEFU 84 五指山
【分析】 扩展欧几里得算法
<span style="font-size:18px;">#include <stdio.h>
#include <math.h>
long long gcd(long long a,long long b)
{
return b==0?a:gcd(b,a%b);
}
long long exgcd(long long a,long long &x,long long b,long long &y )
{
if(b==0)
{
x=1;
y=0;
return a;
}
long long d=exgcd(b,x,a%b,y);
long long p=x;
x=y;
y=p-a/b*y;
return d;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
long long n,d,x,y,xx,yy,p;
scanf("%lld%lld%lld%lld",&n,&d,&x,&y);
long long g=gcd(n,d);
long long s=y-x;
if(s%g)
printf("Impossible\n");
else
{
exgcd(d,xx,n,yy);
p=n/g;
xx=xx*s/g;
xx=(xx%p+p)%p;
printf("%lld\n",xx);
}
}
return 0;
}
</span>

977

被折叠的 条评论
为什么被折叠?



