import java.util.*;
// C(n,m) = A(n,m) / A(m,m)
public class Arrangement
{
public static long dealArrangement(int n, int m)
{
int[] up = new int[m];
int[] low = new int[m];
int r;
long upd = 1;
for (int i = 0; i < m; i++)
{
up[i] = n - i;
low[i] = m - i;
}
for (int i = 0; i < m; i++)
for (int j = 0; j < m-1; j++)
{
if (up[i] == 1)
break;
if (low[i] == 1)
continue;
r = gcd(up[i], low[j]);
if (r > 1)
{
up[i] /= r;
low[j] /= r;
}
}
for (int i = 0; i < m; i++)
upd *= up[i];
return upd;
}
public static int gcd(int p, int q)
{
if (q == 0)
return p;
return gcd(q, p%q);
}
public static void main(String[] args)
{
int n = 200;
int m = 4;
long d = dealArrangement(n, m);
StdOut.println("d = " + d);
}
}
/*
d = 64684950
*/
优化排列组合计算---java
最新推荐文章于 2022-05-30 05:00:00 发布