题目:
在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。 如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。 对于一个分数a/b,表示方法有很多种,但是哪种最好呢? 首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。
分析:
有理数a/b,设c是b/a的商,e为余数,则b=a*c+e,b/a=c+e/a<c+1,a/b>1/(c+1),设E=c+1(E为真分数a/b包含的最大埃及分数),a=a*E-b,b=b*E,此时的a,b可能有最大公约数,需要化简,如此循环,直到a=1跳出循环。
#include
using namespace std;
int inp(int a,int b)
{
while(b!=0)
{
int r=a%b;
a=b;
b=r;
}
return a;
}
int main()
{
int A,B,C;
while(cin>>A>>B)
{ cout<
<<"/"<<<"=";
while(A!=1)
{
C=B/A+1;
A=A*C-B;
B=B*C;
int r=inp(A,B);
if(r>1)
{
A/=r;
B/=r;
}
cout<<"1/"<
<<"+";
}
cout<
<<"/"<<