poj 2142
欧几里得。
代码:
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
long long x,y;
long long egcd(long long s,long long t){
if(t==0)
{
x=1;
y=0;
return s;
}
long long i=egcd(t,s%t);
long long temp=x;
x=y;
y=temp-s/t*y;
return i;
}
long long abs(long long s){
if(s<0) return -s;
else return s;
}
void read(){
long long i,j,k,a,b,d,t1,t2,f;
// ifstream cin("in.txt");
while(cin>>a>>b>>d){
if(a==0&&b==0&&d==0) return ;
f=0;
if(a<b)
{
f=1;swap(a,b);
}
i=egcd(a,b);
y=y*d/i%a+a;
y=y%(a/i);
x=(d-b*y)/a;
t1=y*i/a;
t2=t1+1;
if(abs(x+t1*b/i)+abs(y-t1*a/i)<abs(x+t2*b/i)+abs(y-t2*a/i))
{
if(f==0)
cout<<abs(x+t1*b/i)<<' '<<abs(y-t1*a/i)<<endl;
else
cout<<abs(y-t1*a/i)<<' '<<abs(x+t1*b/i)<<endl;
}
else
if(abs(x+t1*b/i)+abs(y-t1*a/i)>abs(x+t2*b/i)+abs(y-t2*a/i))
{
if(f==0)
cout<<abs(x+t2*b/i)<<' '<<abs(y-t2*a/i)<<endl;
else
cout<<abs(y-t2*a/i)<<' '<<abs(x+t2*b/i)<<endl;
}
else
{
if(a*abs(x+t1*b/i)+b*abs(y-t1*a/i)<a*abs(x+t2*b/i)+b*abs(y-t2*a/i))
{
if(f==0)
cout<<abs(x+t1*b/i)<<' '<<abs(y-t1*a/i)<<endl;
else
cout<<abs(y-t1*a/i)<<' '<<abs(x+t1*b/i)<<endl;
}
else
{
if(f==0)
cout<<abs(x+t2*b/i)<<' '<<abs(y-t2*a/i)<<endl;
else
cout<<abs(y-t2*a/i)<<' '<<abs(x+t2*b/i)<<endl;
}
}
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号