poj 1061 青蛙的约会 二元一次不定方程 http://poj.org/problem?id=1061

来源:互联网 发布:网络重口现场微博 编辑:程序博客网 时间:2024/05/16 01:58
#include<iostream>using namespace std;typedef long long inta;int extend_gcd(inta a,inta b,inta &x,inta &y,inta &gcd){   if(b==0)   {      x=1;      y=0;      gcd=a;   }   else   {      extend_gcd(b,a%b,x,y,gcd);      int temp=x;      x=y;      y=temp-a/b*y;   }}int gcd(int a,int b){   if(b==0)   return  a;   else return gcd(b,a%b);}int main(){   inta x,y,m,n,l;   while(cin>>x>>y>>m>>n>>l)   {      inta a=n-m;      inta b=l;      inta c=x-y;      inta s=gcd(a,b);       if(c%s!=0)      {         cout<<"Impossible"<<endl;      }       else      {        inta x0,y0,q;        a/=s;        b/=s;        c/=s;        extend_gcd(a,b,x0,y0,q);        x0*=c;        if(b<0)  b=-b;        x0=(x0%b+b)%b;        cout<<x0<<endl;      }   }}

//  1 扩展欧几里得算法,利用递归求出 Bezout等式中x和y的值

//  2  不知道a的正负性时a mod b=(a%b+b0%b

//  3 ax+by=c; gcd(a,b)=1;  x的通解模b同余,要求取最下的非负整数就在完系中取即可

原创粉丝点击