Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 查找线性时间内数组元素的可能三元组数(包括重复数)?_C - Fatal编程技术网

C 查找线性时间内数组元素的可能三元组数(包括重复数)?

C 查找线性时间内数组元素的可能三元组数(包括重复数)?,c,C,我尝试使用nCm函数查找所有组合,但对于较大的数字,它失败了 int fact(int num) { if (num == 1 || num == 0) return 1; return num * fact(num-1); } int nCm(int num, int base) { int result; return result = fact(num) / (fact(num - base)*fact(base)); } 其中base=

我尝试使用nCm函数查找所有组合,但对于较大的数字,它失败了

int fact(int num)
{
    if (num == 1 || num == 0)
        return 1;
    return num * fact(num-1);
}

int nCm(int num, int base)
{
    int result;
    return result = fact(num) / (fact(num - base)*fact(base));
}

其中
base=3
和num可以是任何值,因此对于大num,它将失败。我不能使用BigQuin库,所以请帮助

< P>如果你考虑一下这个分区,你会看到<代码>(N-B)!“代码>项”对于分子和分母都是通用的(即它们相互抵消)

你只需要想想
n作为:

n * (n-1) * (n-2) * ...  * (n-b+1) * (n-b)!

现在,您可以计算结果,而无需任何除法或较大的中间值(可能会溢出),也可以不使用递归进行计算。

您可以计算
n/(注)不计算
n。此外,您可以迭代计算阶乘,而不是递归计算。最后,如果
num
可以是任何东西(例如格雷厄姆的数字),那么你注定会失败。如果你真的有太多,你可以创建自己的类型,能够根据需要多少字节来保存一个数字。这取决于你的实施。