关于 埃及分数 的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较大,岂不是要不断迭代,先分解成两个之和,再迭代分解成三个之和……就需要巨大的数组存放中间数据,这样程序运行就会特别大特别慢。有什么办法可以较好地解决吗? 展开
一个埃及分数可以分解成若干埃及分数之和: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较大,岂不是要不断迭代,先分解成两个之和,再迭代分解成三个之和……就需要巨大的数组存放中间数据,这样程序运行就会特别大特别慢。有什么办法可以较好地解决吗? 展开
展开全部
这个个人觉得是要很大的内存来存数据的,要加快速度可以用哈希的方式,类似于查找表,只要确定了分解方式的都放在表里,当然这个只对情况比较多的有效,不足之处可以继续探讨。
更多追问追答
追问
如果只是纯粹使用二位数组存放的话,确实需要巨大的数据,比如m=5,就要先做二项分解,然后迭代成三项……,会特别繁琐吧?我在想能不能使用指针的方式操作,就是中间数据不要全部存储,只是用一个一维数组记录当前结果,指针指到某一项,对这一项进行二次分解,然后输出结果,之后就把结果抹掉。这样会不会更好些?
追答
这种方式当然可以的,反正也跟前面的无关了,记录当前就好,一层一层往下走,比如m=5,第一层是原始分数的话,总共就要走5层,不知道速度怎么样,因为每一层都要进行分解计算,计算结果如果可以保存的话,估计会快点。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询