首页 > 编程知识 正文

埃及分数算法复杂度是,埃及分数算法原理

时间:2023-05-04 03:10:06 阅读:187133 作者:587

埃及和中国一样,也是世界文明古国之一。 古埃及人只使用分子为1的分数来表示一个真分数时,就把它分解成几个埃及分数之和。 例如,7/8表示为1/2 1/3 1/24。 设计程序用最少的埃及分数之和的形式表示了真正的分数

这与每个项目减去前一个项目,留下分子为1的最大真点数即可的贪婪思想有关,如何找到真点数中所含的最大埃及点数是解决问题的关键。

设真分数为A/B,b除以a得到的整数部分为c,馀数为d,则以下公式成立。

B=AC D

也就是说

B/A=CD/A<; C1 (因为D/a小于1,所以C D/A C1且C 1是比B/A大的最小点数。

分式倒置为:

A/B>; 1/(C 1 )

1/(C1 )是真点数A/B中所含的最大埃及点数。 如果E=C 1

a/B-1/e=(AE-B )/(be ) )通分

从真分数减去最大埃及分数后,得到真分数(AE-B )/be ),该真分数中可能存在质子,需要简化以使分子和分母可以同时除以最大公约数。

具体的实现代码:

#includestdio.h //使用库函数printf和Scanfvoidegyptfraction(inta,int B ); //获取表示埃及分数intcommonfactor(intm,int n )的函数声明//函数声明、最大公约数//空行。 以下为主函数int main () ) { int A,b; printf ('请输入分数分子:'); //提示消息scanf('%d”,a ); printf ('请输入分数的分母:'); //提示消息scanf('%d”,b ); egyptfraction(a,b ); //将表示真分数A/B return 0的函数调用//0返回给操作系统,指示程序已成功完成} //空行。 以下为其他函数定义voidegyptfraction(inta,int B ) )//函数定义中具有最小真分数的埃及分数之和int E,r; printf('%d/%d=',a,b ); //输出真分数A/B do { E=B/A 1; //真分数A/B中包含的最大埃及分数Printf('1/%D ),e ); //输出1/E printf (' ); A=A*E-B; //分子//根据以下两个句子计算A/B-1/E (通分B=B*E; //分母R=CommonFactor(B,a ); //函数调用要求a和b的最大公约数if(R1 )//最大公约数大于1。 也就是说,A/B可以简并({ A=A/R; B=B/R; 简化//a/b } while (a1 ); //A/B不是埃及的分数时,执行循环printf(1/%D(N ),b )。 //输出最后的埃及分数1/B return; //执行终止函数Egypt fraction (intcommonfactor ) int n,int n )//定义函数,求出m和n的最大公约数)辗转相除) { int r=m%n; while(r!=0(//如果馀数不为0,则执行循环(m=n; n=r; r=m% n; } return n; 返回//最大公约数n )

这篇文章参考了一本书

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。