埃及分数(EgyptFraction)

/*思路:设B=A*C+D
         B/A=C+D/A<C+1
		 A/B>1/(C+1)
		 即:1/C+1 为A/B所包含的最大真分数。
		 设E=C+1,由于A/B-1/E=(A*E-B)/B*E,则最大真分数减去最大埃及分数后得到
	     (A*E-B)/B*E,该真分数可能存在公因子,需要化简,可以将分子分母同时除以
		 最大公约数	 
  算法:EgyptFraction(A,B)
  输入:真分数的分子A和分母B
  输出:最少的埃及分数之和
       1.E=B/A+1;
	   2.输出1/E;
	   3.A=A*E-B B=B*E
	   4.求A和B的最大公约数R,如果R不为1,则将A和B同时除以R
	   5.如果A=1,则输出1/B,算法结束;
	     否则转步骤1重复执行         
*/         
#include<stdio.h>
void  EgyptFraction(int A,int B);
int   CommonFactor(int m,int n);

int main()
{
	int A,B;
	scanf("%d %d",&A,&B);
	EgyptFraction(A,B);
	return 0;
}

void EgyptFraction(int A,int B)
{
	int E,R;
   do{
   	E=B/A+1;
   	printf("1/%d",E);
   	printf("+");
   	A=A*E-B;
   	B=B*E;
   	R=CommonFactor(B,A);
   	if(R>1)
	{
     A=A/R;
	 B=B/R;		
    }
   }while(A>1);
   printf("1/%d\n",B);
   return ;
   
}
 
 
int CommonFactor(int m,int n)
{
	int r=m%n;
	while(r!=0)
	{
		m=n;
		n=r;
		r=m%n;
	}
	return n;
 } 
 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值