閱讀637 返回首頁    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 數論