poj1061,斐蜀定理
费蜀定理:
对于任意正整数x,y,一定存在整数a,b,使得: ax+by=gcd(x,y);
定理1 gcd(a,b)是ax+by的线性组合的最小正整数
定理2 如果ax+by=c,x,y∈z;则c%gcd==0;
定理3 如果a,b是互质的正整数,c是整数,且方程 ax+by=c有一组整数解x0,y0,则此方程的一切整数解可以表示为x=x0+bt;y=y0-at;t∈z;(所以解都是第一组解的倍数)
#include <iostream> #include <algorithm> using namespace std; int x,y,xn,yn,l; int gcd(int a,int b){ return b?gcd(b,a%b):a; } int main(int argc, char** argv) { cin>>x>>y>>xn>>yn>>l; if(yn==xn){ cout<<"Impossible\n"; return 0; } if(yn>xn) swap(yn,xn),swap(y,x); long long s=(x>y)?y+l-x:y-x; //cout<<s<<endl; int v=xn-yn; if(s%gcd(v,l)==0){ while(s%v!=0) s+=l; cout<<s/v<<endl; }else cout<<"Impossible\n"; return 0; }