关于 埃及分数 的C++程序。

背景:埃及分数就是指分子为1的分数,比如1/2,1/5……。一个埃及分数可以分解成若干埃及分数之和:1/2=1/3+1/61/3=1/4+1/12分解成两个埃及分数之和的... 背景:埃及分数就是指分子为1的分数,比如1/2,1/5……。
一个埃及分数可以分解成若干埃及分数之和:1/2=1/3+1/6
1/3=1/4+1/12
分解成两个埃及分数之和的通式为1/n=1/(n+a) + 1/(n+b)
其中ab=n²。
如果分解成三个之和只要对其中一个加数再分解就可以了。
1/2=1/4+1/12+1/6
我希望能够设计一个程序实现:输入一个n,并且输入分解的个数m,输出所有的可能项。
问题是:如果m较大,岂不是要不断迭代,先分解成两个之和,再迭代分解成三个之和……就需要巨大的数组存放中间数据,这样程序运行就会特别大特别慢。有什么办法可以较好地解决吗?
展开
 我来答
百度网友8f410c1
2013-05-16
知道答主
回答量:20
采纳率:0%
帮助的人:17.1万
展开全部
因为要输出所有可能项,所以想省掉内存占用是不可能的,所以只能在速度上进行优化。
如 lch743 所说,如果你只是要一次结果或者少量结果,那么大可不必优化,如果你需要长期多次进行这种分解,就可以建立查找表,优化分解操作。如果这样还不能满足你的速度要求,可能你每天有很多个需要分解的数,并且m还巨大,你就得考虑分布式计算了。用更多的计算机资源加速计算,问题总有解决之道,关键就是看值不值得。
lch743
2013-05-16 · TA获得超过1181个赞
知道小有建树答主
回答量:377
采纳率:50%
帮助的人:365万
展开全部
这个个人觉得是要很大的内存来存数据的,要加快速度可以用哈希的方式,类似于查找表,只要确定了分解方式的都放在表里,当然这个只对情况比较多的有效,不足之处可以继续探讨。
更多追问追答
追问
如果只是纯粹使用二位数组存放的话,确实需要巨大的数据,比如m=5,就要先做二项分解,然后迭代成三项……,会特别繁琐吧?我在想能不能使用指针的方式操作,就是中间数据不要全部存储,只是用一个一维数组记录当前结果,指针指到某一项,对这一项进行二次分解,然后输出结果,之后就把结果抹掉。这样会不会更好些?
追答
这种方式当然可以的,反正也跟前面的无关了,记录当前就好,一层一层往下走,比如m=5,第一层是原始分数的话,总共就要走5层,不知道速度怎么样,因为每一层都要进行分解计算,计算结果如果可以保存的话,估计会快点。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式