欧拉计划Problem 53

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!(n−r)!
,where r ≤ nn! = n×(n−1)×...×3×2×1, 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值