查阅博客:
http://blog.163.com/justly@yeah/blog/static/1210370002009530105732555/
http://blog.csdn.net/zhangwei1120112119/article/details/8567168
BIT1052 poj1061 青蛙的约会
给定整数a,b,c,求解整数x,y?
浓缩:ax + by = gcd(a,b)
如果c是gcd(a,b)的倍数,则方程(1)有解。有解就意味着有无数解。否则,无解!
假设x1,y1是a*x+b*y=gcd(a,b)的一个解
通解:
x = x1 + k * b/gcd(a,b)
y = y1 - k * a/gcd(a,b)
其中,k为任意整数
http://blog.163.com/justly@yeah/blog/static/1210370002009530105732555/
http://blog.csdn.net/zhangwei1120112119/article/details/8567168
BIT1052 poj1061 青蛙的约会
http://acm.bit.edu.cn/mod/programming/view.php?a=538
给定整数a,b,c,求解整数x,y?
浓缩:ax + by = gcd(a,b)
如果c是gcd(a,b)的倍数,则方程(1)有解。有解就意味着有无数解。否则,无解!
假设x1,y1是a*x+b*y=gcd(a,b)的一个解
通解:
x = x1 + k * b/gcd(a,b)
y = y1 - k * a/gcd(a,b)
其中,k为任意整数
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define ll long long
ll x,y;
ll exgcd(ll a,ll b)
{
if(b==0)
{
x=1,y=0;
return a;
}
ll gcd=exgcd(b,a%b);
ll t=x;
x=y;
y=t-a/b*y;
return gcd;
}
ll mod(ll a,ll b)
{
if(a>=0)
return a%b; //a%b,结果正负,只和a的正负有关
else
return a%b+abs(b); //b可能为负数。
}
int main()
{
ll X,Y,m,n,l;
ll a,b,c;
int i,j,k;
while(~scanf("%lld%lld%lld%lld%lld",&X,&Y,&m,&n,&l))
{
a=n-m;
b=l;
c=X-Y;
ll gcd=exgcd(a,b);
if(c%gcd!=0) printf("Impossible\n");
else
{
x*=c/gcd;
x=mod(x,b/gcd);
printf("%lld\n",x);
}
}
}