您的位置:首页 > 编程语言 > C#

两种方法计算组合数C#程序

2010-02-01 12:25 260 查看
/// <summary>
/// 快速计算组合数
/// </summary>
/// <param name="n"></param>
/// <param name="m"></param>
/// <returns></returns>
private UInt64 calcCombinQuick(int n, int m)
{
if(m==n) return 1;
if (n == 0) return 1;
if (n == 1) return (UInt64)m;
int[] sn = new int
;
int[] tn = new int
;
UInt64 times=1;
int temp = 1;
for (int i = 0; i < n; i++)
{
sn[i] = m - i;
tn[i] = i + 1;
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
temp=calcGreatestCommonDivisor(sn[i],tn[j]);
if (temp > 1)
{
sn[i] = sn[i] / temp;
tn[j] = tn[j] / temp;
}
}
times *= (UInt64)sn[i];
}
return times;

}
/// <summary>
/// 计算最大公约数
/// </summary>
/// <param name="v"></param>
/// <param name="u"></param>
/// <returns>最大公约数</returns>
private int calcGreatestCommonDivisor(int v, int u)
{
int t = 1;
int r;
if (v > u)
{ t = u; u = v; v = t; }
while ((r = u % v) != 0)
{
u = v;
v = r;
}
return (v);

}
/// <summary>
/// 递归法计算组合数,不过很慢的
/// </summary>
/// <param name="mm"></param>
/// <param name="nn"></param>
/// <returns></returns>
private UInt64 calccombin(int mm, int nn)
{
if (( nn == 0)||(mm==nn)) return 1;
return calccombin(mm - 1, nn - 1) + calccombin(mm-1, nn);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: