【发布时间】:2015-12-09 15:37:22
【问题描述】:
我正在尝试计算某个数组中元素数的组合数。我需要确切的组合数才能将其用作要在 GPU 中执行的线程数。
但是数据非常大,任何数据类型的大数都无法计算阶乘。
有没有一种方法可以计算组合的数量而无需找到阶乘?还是更有效的方法?
总结了问题:
int no_of_combinations = combination(500,2);
public static int factorial(int m)
{
int x = 1;
for (int i = m; i > 0; i--)
x = x * i;
return x;
}
public static int combination(int m, int n)
{
int x = 0;
x = factorial(m) / (factorial(n) * factorial(m - n));
return x;
}
【问题讨论】:
-
我不确定这是否会有所帮助,但您是否查看了斯特林的近似值?它是阶乘的近似值。
-
如果你连一个已知数据类型的数字都不能表示,你要怎么做同样数量的线程?
-
@HansP,他在公式中使用阶乘。线程数(公式的结果)可能还可以(合理)。
-
我建议事先简化方程,而不是尝试评估 500!,看看你是否可以简化分数
-
从评论中你的问题更像是Calculate factorials in C#的重复
标签: c# algorithm combinations factorial