题目链接:hdu 4349
给一个数n求
中为奇数的项数
这里有个 公式就是 n&k==k时 C(n,k) 为奇数 具体证明请看 https://wenku.baidu.com/view/f15e9b661eb91a37f1115c23.html
那么我们只要看n的二进制数有多少个1 假设有cnt个 答案就是 2^cnt
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[40];
int cnt(int x){
int cnt = 0;
while(x){
cnt++;
x-=x&-x;
}
return cnt;
}
int main(){
a[0]=1ll;
for(int i = 1; i <= 39; i++) a[i]=a[i-1]*2ll;
int n;
while(~scanf("%d",&n)){
printf("%lld\n",a[cnt(n)]);
}
return 0;
}