//自己做了很久也没有做出来,或者数学太差了,想不到思路!这题是我在百度上搜到比较简洁的做法,所以自己看明白之后再重新实现一次的!
//设x=GCD(a,b),y=LCM(a,b)。
//a=x*k1
//b=x*k2, 其中 GCD(k1,k2)=1
//有y=x*k1*k2;
//求min(a,b),即min(k1,k2)
//有k1和k2两个未知数,数据规模也不是特别大,可以用搜索求解。因为只需找到min(k1,k2),我们从k1,k2最接近时开始搜索,只要找到符合条件的解便能保证最优,所以搜索量还是很小的。
#include "iostream"
#include "cmath"
using namespace std;
int GCD(int x, int y)
{
if (x%y==0)
return y;
else
return GCD(y, x%y);
}
int main()
{
int G, L;
while (cin >> G >> L && G != 0 && L != 0)
{
int c = L / G;
int divisor = sqrt(double (c));
int i;
for (i = divisor; i >= 1; i--)
if (c % i == 0 && GCD(c/i, i) == 1)
break;
cout << L/i - i * G << " " << i * G << " " << L / i << endl;
}
}