POJ 3219

POJ 3219

题意如下:

二项式系数C(n, k)因它在组合数学中的重要性而被广泛地研究。二项式系数可以如下递归的定义:

C(1, 0) = C(1, 1) = 1;
C(n, 0) = 1对于所有n > 0;
C(n, k) = C(n − 1, k − 1) + C(n − 1, k)对于所有0 < kn

给出nk,你要确定C(n, k)的奇偶性

我是用不怎么牛逼的做法 虽然也是0MS

The parity of C(n, k) can be determined by calculating the exponent of 2 in its factorization.
 c(m,n) = m!/n!/(m-n)!
分别求出m,n,m-n三个阶乘里面有多少个2,只要m!中2的个数多余n!中2的个数加上(m-n)!中2的个数,那么结果就是偶数

CODE如下:
#include <stdio.h>

int main()
{
 int n,m,k;
 int a,b,c;
 while(scanf("%d%d",&n,&k)!=EOF)
 {
     m=n-k; a=b=c=0;
        while(n=n>>1) a+=n;
        while(m=m>>1) b+=m;
        while(k=k>>1) c+=k;
        if(a-b>c) printf("0\n");
        else printf("1\n");

    }
}


牛逼的结论为····如果n&k==k就为奇数 否则就是偶数 看到了一个证明 但没有看懂···

你可能感兴趣的:(POJ 3219)