import java.util.Scanner;
/* 算法竞赛入门经典 例题7-2 埃及分数问题:
* 迭代加深搜索 从小到大枚举迭代深度上限
* 解答树模型:
* 第0层:根
* 第1层:1/2, 1/3, 1/4...
* 第2层: 1/2的孩子是1/2+1/3, 1/2+1/4, 1/2+1/5...
* 1/3的孩子是1/3+1/4, 1/3+1/5, 1/3+1/6...
* 第3层: 1/2+1/3的孩子节点是1/2+1/3+1/4, 1/2+1/3+1/5...
* 1/2+1/4的孩子节点是1/2+1/4+1/5, 1/2+1/4+1/6...
* ...
* 剪枝策略: (算法竞赛入门经典p130详解)
* */
public class EgypFrac {
static final int MAX = 1000;//最大迭代深度
static int[] stack = new int[MAX];//保存结果的栈
static int a, b;
static int index = MAX - 1;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while ((a = scanner.nextInt()) > 0) {
b = scanner.nextInt();
double frac = a * 1.0 / b;
index = MAX - 1;
isFound(0, i, frac, 2);
for (int i = index + 1; i < MAX - 1; i++)
System.out.printf("1/%d + ", stack[i]);
System.out.println("1/" + stack[MAX - 1]);
}
}
/* frac要求的分数 res当前求得结果 deep当前迭代深度 start当前迭代起始值
*/
static boolean isFound(double res, int deep, double frac, int start) {
for (int i = start;; i++) {
double temp = res;
temp += 1.0 / i;
if (temp + (MAX - deep) * 1.0 / (i + 1) < frac)// 剪枝
return false;
if (temp > frac)// 结果略大进入下层循环 增加较小的分数值
continue;
if (Math.abs(temp - frac) < 1e-6) {//递归出口
stack[index--] = i;
return true;
}
if (deep < MAX) {
if (isFound(temp, deep + 1, frac, i + 1)) {
stack[index--] = i;
return true;
}
}
}
}
}