http://poj.org/problem?id=1061
第一遍的写法:
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; long long x,y,m,n,l,j1,j2; long long gcd(long long a,long long b) { return b==0?a:gcd(b,a%b); } void extend(long long a,long long b,long long &x1,long long &y1) { if(b==0) { x1=1; y1=0; return ; } extend(b,a%b,x1,y1); long long t=x1; x1=y1; y1=t-a/b*y1; return ; } int main() { while(scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l)!=EOF) { long long a=n-m; long long b=l; long long c=x-y; long long temp=gcd(a,b); if(c%temp!=0||n==m) { printf("Impossible\n"); continue; } a/=temp; b/=temp; c/=temp; extend(a,b,j1,j2); long long t=-(j1*c)/b; j1=c*j1+t*b; if(j1<0) { if(b>0) j1+=b; } printf("%lld\n",j1); } return 0; }