如何通过忽略其中包含0的元素来提高数组的效率

时间:2013-11-26 19:53:12

标签: c arrays factorial

我有一段代码可以计算一个大因子,

该赋值声明我必须使用数组,但是它的范围是20,这是非常低效的!到60!所以我必须使用一个有82个元素为60的数组!是82位数。

这意味着在计算29内的数字之和时!会有很多元素包含0,但无论如何代码都将通过它们。

有没有办法克服这个问题?我被告知有关malloc的功能?但我不太确定!

1 个答案:

答案 0 :(得分:0)

Malloc函数用于动态分配内存。你可能会看到这像一个可变大小的数组。但这对你的情况没用。

众所周知,阶乘积中的0的数量等于除数的数量等于产品中所有数字中的5的除数(因为10 = 2 * 5且2s多于5s)。更清楚的是,让我们看一个例子:

10! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10

如果我们分解所有内容:

10! = 1 * 2 * 3 * 2 ^ 2 * 5 * 2 * 3 * 7 * 2 ^ 3 * 3 ^ 2 * 2 * 5 = 2 ^ 9 * 3 ^ 4 * 5 ^ 2 * 7

如果你想计算10!的数字总和,你可以摆脱2 5s和2 2s,并计算产品:

2 ^ 7 * 3 ^ 4 * 7

这将从您的最终产品中删除所有0,但需要更长时间,因为您必须进行更多计算。