下面为求取组合数的代码:
1 #include
#define MAX 10009
int prime[168];
void print(int *v, int length)
{
int i = 0;
for (; i < length; i++)
printf("%d ", v[i]);
putchar('\n');
}
int getPrime()
{
int i = 3, k = 1;
int j = 0;
int flag;
prime[0] = 2;
for (; i < 1000; i++) {
for (flag = 0, j = 0; j < k; j++) {
if (i % prime[j] == 0) {
flag = 1;
break;
}
}
if (!flag)
prime[k++] = i;
}
print(prime, 168);
}
int comb(int m, int n)
{
int count[168] = { 0 };
int i = 0, j = 0;
int mm;
int mul = 1, tmp;
for (i = m; i > m - n; i--) {
mm = i;
for (j = 0; mm != 1; j++) {
if (mm % prime[j] == 0) {
mm /= prime[j];
++count[j];
--j;
}
}
}
for (i = n; i >= 2; i--) {
mm = i;
for (j = 0; mm != 1; j++)
if (mm % prime[j] == 0) {
mm /= prime[j];
--count[j];
--j;
}
}
for (i = 0; i < 168; i++) {
tmp = count[i];
while (tmp) {
mul = (mul * prime[i]) % MAX;
tmp--;
}
}
return mul;
}
int main()
{
getPrime();
printf("%d\n", comb(2, 1));
return 0;
}
关于找一找教程网
本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[求组合数m_n]http://www.zyiz.net/tech/detail-126160.html