阅读637 返回首页    go 阿里云 go 技术社区[云栖]


POJ 3219 二项式系数奇偶性的判定

这题想了很久 因为题里的给了递推公式 但是数据范围太大 用不了递归打表的 然后上网发现了

这个 其实还有N!/(K!(N-K)!)分别求出 N! K! (N-K)!中因子2的个数 如果N!中2的因子个数大于

后两项的和 那么就是偶数 如果等于就为奇数  

判定准则Cn^m(m≤n)的奇偶性取决于m和n—m的二进制表达式中是否存在位于同一数位上的

两个数码都是1,如果存在,Cn^m是偶数,否则Cn^m就是奇数.

#include <iostream>
#include<cstdio>
using namespace std;

int main()
{
    int n,k;
    while(~scanf("%d%d",&n,&k))
    printf("%d\n", k&(n-k)?0:1);
    return 0;
}

下面是我做的

N!/(K!(N-K)!)分别求出 N! K! (N-K)!中因子2的个数 如果N!中2的因子个数大于

后两项的和 那么就是偶数 如果等于就为奇数 

#include <iostream>
#include<cstdio>
using namespace std;

int main()
{
    int n,k;
    long long a[35];
    a[1]=2;
    for(int i=2; i<=32; i++)
        a[i]=2*a[i-1];
    while(~scanf("%d%d",&n,&k))
    {
        if(n==k||k==0)
        {
            printf("1\n");
            continue;
        }
        int w=0,b=0,c=0;
        for(int i=1; i<=32; i++)
        {
            w+=n/a[i];
            b+=k/a[i];
            c+=(n-k)/a[i];
        }
        if(w>b+c)
            printf("0\n");
        else
            printf("1\n");
    }
    return 0;
}

最后更新:2017-04-04 07:03:27

  上一篇:go 【最近面试遇到的一些问题】JAVA UTF-8 GB2312 编码互转
  下一篇:go POJ1528 数论