



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
真分数分解成埃及分数的两种算法对比陈宗权真分数:分子小于分母的分数。埃及分数:分子为1的真分数。我们约定分子分母都是自然数,分数的分子用a表示分母用b表示。算法1:基本算法1、定义变量i,初始化为1,用来尝试各个埃及分数的分母; 2、约分;3、如果分子是1,表明已经是埃及分数,不用再分解,结束;4、把i增加1;5、如果分数值大于1/i,从分数中分解出一个埃及分数1/i,分数的值减少1/i,约分,回到步骤4;6、否则回到步骤3;实现代码:#include int common(int x, int y)/*求最大公约数*/ if(x=0|y=0) return x+y; return common(y, x%y);void reduce(int* a, int* b)/*约分*/ int div = common(*a, *b); if(div1) *a /= div; *b /= div; int main()int a=0, b=1;/*分子分母*/ int i=1;printf(请输入一个真分数(a/b):n);scanf(%d/%d, &a, &b); if(a1|bb)/* a/b1/i,可以分解出一个1/i */ printf(1/%d + , i); fflush(stdout);/*这不是必须的,为的是能立即看到每一个分解的埃及分数*/ /*从 a/b中减去那个埃及分数*/ a = a*i-b; b = b*i; reduce(&a,&b);/*约分*/ return 0;算法2:改进算法1、定义变量i,用来保存各个埃及分数的分母; 2、如果分母是分子的倍数,直接约简成埃及分数;3、否则分数中一定包含一个分母为(b/a)+1的埃及分数;4、如果分子是1,表明已经是埃及分数,不用再分解,结束;5、如果分子是3而且分母是偶数,直接分解成两个埃及分数1/(b/2)和1/b,结束;6、从分数中减去这个分母为(b/a)+1的埃及分数,回到步骤2。实现代码:#includeint main() int a=0, b=1;/*分子分母*/ int i;/*i用来保存每一步分解出的埃及分数的分母*/ printf(请输入一个真分数(a/b):); scanf(%d/%d,&a,&b); if(a1|b=a) printf(不是真分数n); return 0; printf(%d/%d = , a, b); while(true) if(b%a=0) /*若分母是分子的倍数,直接变成埃及分数*/ i=b/a; a=1; else/*否则分解出一个分母为(b/a)+1的埃及分数*/ i=(b/a)+1; /*这个括号不是必须的,为的是看起来更清晰*/ if(a=1)/*分子为1了,该结束了*/ printf(1/%dn,i); break; else if(a=3&b%2=0) /*这块不是必须的,若分子为3分母为偶数,一定可以直接分解成两个埃及分数1/(b/2)+1/b,然后就该结束了*/ printf(1/%d + 1/%dn,b/2,b); break; else printf(1/%d + ,i); fflush(stdout);/*这不是必须的,为的是能立即看到每一个分解的埃及分数*/ /*从 a/b中减去那个埃及分数*/ a=a*i-b; b=b*i; return 0;对比两种算法都可以完成分解任务,但在时间复杂度上有明显的差异。1、在寻找埃及分数的过程中,算法1采用穷举的方法,尝试所有可能的埃及分数;算法2采用计算来直接找到最可能的埃及分数,分母为(b/a)+1,后者效率比前者高。比如,对.4/123,算法1从1/2一直遍历到1/31才找到合适的埃及分数,但算法2用123/4+1=31直接就找到1/31。2、当分子为3时,算法2用常识做了特殊处理,可以提高分解的效率。假设用2k来表示一个偶数,我们知道3/(2k)可以分解成1/k + 1/(2k),这样分解直接找到两个目标埃及分数,不用逐个再去分解,更不用穷举。比如,还用8/11为例,分解出1/2和1/5之后还剩下3/110。用穷举或者计算的方法对3/110的分解结果是3/110=1/37+1/4070。用常识的的方法分解结果是3/110=1/55+1/110。可以看到,前者分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版员工雇佣合同范本
- 2025甘肃金昌市市直和县直教育系统引进高层次和急需紧缺人才招聘35人(第二批)考前自测高频考点模拟试题及完整答案详解1套
- 2025江苏金灌投资发展集团有限公司、灌南城市发展集团有限公司招聘高层次人才10人考前自测高频考点模拟试题及一套参考答案详解
- 2025光伏发电项目合作合同
- 2025年河北邯郸馆陶县公开招聘(选聘)辅助性岗位工作人员13名模拟试卷及完整答案详解一套
- 2025年电子产品购销合同模板
- 2025年上海无固定期限劳动合同样本
- 2025广东郁南县兴华产业投资有限公司、郁南县兴瑞产业投资有限公司招聘员工6人考前自测高频考点模拟试题及答案详解(历年真题)
- 2025贵州黔南州瓮安县人力资源和社会保障局招聘公益性岗位人员1人考前自测高频考点模拟试题及答案详解(名校卷)
- 2025年枣庄山亭区人民医院公开招聘备案制专业技术人员(15人)考前自测高频考点模拟试题及答案详解(名师系列)
- 托育园厨师安全工作责任书
- GB/T 3810.2-2016陶瓷砖试验方法第2部分:尺寸和表面质量的检验
- 《编程猫系列》第1课-Hello-编程猫(课件)
- GB 16899-2011自动扶梯和自动人行道的制造与安装安全规范
- 非典型骨折课件
- 封闭区倒塌围墙修复施工方案
- 户口本翻译样本-Word范文-Word范文
- 企业融资计划书2022
- 99S203 消防水泵接合器安装图集
- 多发性大动脉炎
- 光纤损耗测试记录
评论
0/150
提交评论