F



i



v



e



-



gr



ea



t
欧几里得扩展模板

用于求 ax+by=c 的解

#include<stdio.h>
int x0,y0;
int oujdk(int a,int b)
{
    if(b==0)
    {  x0=1;
       y0=0;
      return a;
    }
int t=oujdk(b,a%b);
   int w=x0;
    x0=y0;
    y0=w-a/b*y0;
    return t;


}

int main()
{
  int x,y,t,l,m,n,a,b,r;
  scanf("%d%d%d%d%d",&x,&y,&n,&m,&l);

if(m==n)printf("n0");
else{

r=oujdk(l,m-n);

 x0=(x-y)/r*x0;
 y0=(x-y)/r*y0;

if((x-y)%r!=0)printf("n0");
else
{  if(x0<0)x0+=l;
   printf("%d %d",x0,y0);
} 
}
return 0;
}

  转载请注明: IT学习 欧几里得扩展模板