There are exactly ten ways of selecting three from five, 12345:
123, 124, 125, 134, 135, 145, 234, 235, 245, and 345
In combinatorics, we use the notation, 5C3 = 10.
In general,
nCr = |
n!
r!(nr)! | ,where r n, n! = n(n1)...321, and 0! = 1. |
It is not until n = 23, that a value exceeds one-million: 23C10 = 1144066.
How many, not necessarily distinct, values of nCr, for 1 n 100, are greater than one-million?
#define N 1000000
int GCT(int x, int y)
{
int temp;
if (x == 1 || y == 1)
{
return 1;
}
if (x < y)
{
temp = x;
x = y;
y = temp;
}
while(x%y)
{
temp = x%y;
x = y;
y = temp;
}
return y;
}
int Combinatorics(int n, int r)
{
int temp1 = r, temp2 = n-r;
if (temp1 == 0 || temp2 == 0)
{
return 1;
}
int ans1 = 1,ans2 = 1;
for (int i = temp1+1,j = 1; i <= n ; i++)
{
ans1 *= i;
if (j <= temp2)
{
ans2 *= j;
j++;
}
int g = GCT(ans1,ans2);
ans1 /= g;
ans2 /= g;
}
return ans1/ans2;
}
int main()
{
clock_t ts,te;
ts=clock();
int answer = 0;
for (int n = 22; n <= 100; n++)
{
for (int r = 0; r <= n/2; r++)
{
if (Combinatorics(n,r) > N)
{
//printf("%10d,%d",n,r);
answer = answer + n + 1 - 2 * r;
break;
}
}
}
printf("\nanswer %d",answer);
te=clock();
printf("\ntime difference: %ds\n",(te-ts)/CLOCKS_PER_SEC);
getchar();
return 0;
}