poj 3219 Binomial Coefficients

//判断C(n,k)的奇偶性
//如果n!中因子2的个数大于k!和(n-k)!中因子2的个数之和,那么C(n,k)就是偶数,否则C(n,k)就是奇数。
//而且计算N!中2的阶数,只要计算N/2+N/4……

#include
<iostream>
using namespace std;
int fac(int d) //计算d!中2的阶数,即因子2的个数
{
int s=0;
while((d=d>>1)!=0)
s
+=d;
return s;
}
int f(int n,int k)
{
if(k==0||k==n)
return 1;
int a=fac(n),b=fac(n-k),c=fac(k);
if(a<=b+c) //比较分子分母2的阶数的大小
return 1;
else
return 0;
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
cout
<<f(n,k)<<endl;
}
return 0;
}

  

posted on 2011-07-22 20:16  sysu_mjc  阅读(156)  评论(0编辑  收藏  举报

导航