标签:ring i++ int 扩展欧几里德 printf algorithm logs mit blog
本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia
#include <cstdio> #include <iostream> #include <cmath> #include <queue> #include <algorithm> #include <cstring> #include <climits> #define MAXN 10000+10 using namespace std; int e_gcd(int a,int b,int& x,int& y) { if(!b) { x=1; y=0; return a; } int ans=e_gcd(b,a%b,x,y); int tmp=x; x=y; y=tmp-a/b*y; return ans; } int a,b,c,x,y,gcd,t,minn=~(1<<31),ansx=0,ansy=0; int main() { while(scanf("%d%d%d",&a,&b,&c)&&!(a==0&&b==0&&c==0)) { int flag=0; if(a<b) { flag=1; swap(a,b); } gcd=e_gcd(a,b,x,y); minn=~(1<<31),ansx=0,ansy=0; if(c%gcd) {printf("no solution\n");continue;} x*=(c/gcd);y*=(c/gcd); t=(y*gcd)/a; for(int i=t-5;i<=t+5;i++) { if(abs(x+b/gcd*i)+abs(y-a/gcd*i)<minn) { minn=abs(x+b/gcd*i)+abs(y-a/gcd*i); ansx=abs(x+b/gcd*i),ansy=abs(y-a/gcd*i); } } if(flag==0) printf("%d %d\n",ansx,ansy); else printf("%d %d\n",ansy,ansx); } return 0; }
标签:ring i++ int 扩展欧几里德 printf algorithm logs mit blog
原文地址:http://www.cnblogs.com/yangyaojia/p/6417666.html