扩展欧几里德
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
void _gcd(ll a,ll b,ll& d,ll& x,ll& y){
if(!b){
d=a;
x=1;
y=0;
}
else{
_gcd(b,a%b,d,y,x);
y-=x*(a/b);
}
}
int main(){
ll a,b,c;
while(~scanf("%lld%lld%lld",&a,&b,&c)){
if(a+b+c==0)
break;
ll d=gcd(a,b);
if((c%d!=0)){
printf("Unquibable!\n");
continue;
}
ll x,y;
ll x0;
_gcd(a,b,d,x,y);
x0=b/d;
x=( (x%x0)*((c/d)%x0)%x0+x0 )%x0;
ll ans1=x;
ll ans2=(c-x*a)/b;
if(ans2<0){
printf("Unquibable!\n");
continue;
}
if(( ans1!=1) && ( ans2!=1) )
printf("%lld fooms and %lld foobs for a twob!\n",ans1,ans2);
else if(( ans1==1) && ( ans2!=1) )
printf("%lld foom and %lld foobs for a twob!\n",ans1,ans2);
else if(( ans1!=1) && ( ans2==1) )
printf("%lld fooms and %lld foob for a twob!\n",ans1,ans2);
else if(( ans1==1) && ( ans2==1) )
printf("%lld foom and %lld foob for a twob!\n",ans1,ans2);
}
return 0;
}