while(1) //一直循环到,有余数的分母是分子的倍数
{
if(b%a) //如果分母b不能被分子a整除,就计算出一个埃及分数的分母 c
{
c=b/a+1;
}
else{ //分数可以被整除的时候,可以直接化简为一个埃及分数
c=b/a;
a=1;
}
if(a==1) //就是上面出现过的整除的情况
{
//printf("1/%1d\n",c);
cout << a / c ;
break;
}
else{ //无法整除的情况
cout << 1 / c << '+';
}
a=a*c-b; //a相当于通分后,原真分数减去埃及分数,也就是余数的分子
b=b*c; //计算余数的分母b
if(a==3&&b%2==2) //此种情况下可以直接化简为两个埃及分数之和,然后结束循环
{
cout << 1/b << '+' << 1/2 << b;
break;
}
}
埃及分数问题,就是将一个真分数,变成多个以1为分子的数相加。