青蛙的约会 扩展欧几里得
对于$ax+by=c$,我们要求 $x$ 的最小正整数解,那么先求出 $ax+by=gcd(a,b)$ 中 $x$ 的解,那么在 $ax+by=gcd(a,b)$ 中 $x$ 的最小正整数解即可表示为:
$x=(x*k+b/gcd(a,b))$%$b/gcd(a,b)$
#include<cstdio> #include<algorithm> using namespace std; typedef long long ll; ll exgcd(ll a,ll b,ll &x,ll &y){ if(b==0){ x=1,y=0; return a; } ll ans=exgcd(b,a%b,x,y); ll tmp=x; x=y,y=tmp-a/b*y; return ans; } int main(){ //freopen("in.txt","r",stdin); ll x,y,m,n,L; scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&L); ll x1,y1; ll a=m-n,b=L,c=y-x; ll ans=exgcd(a,b,x1,y1); ll t=c/ans; if(c%ans!=0) { printf("Impossible\n");return 0; } x1*=t; ll mod=abs(b/ans); x1=((x1%mod)+mod)%mod; printf("%lld",x1); return 0; }