给你一个数 \(n\),让你求 \(C(n,0)、C(n,1)...C(n,n)\) 这 \(n+1\) 个数中为奇数的个数。
由 \(\text{Lucas}\) 定理可得
由于我们计算 \(C(n,m)\) 的奇偶性,那么我们取这里的 \(p=2\)。
因为我们是取模 \(2\),所以所有的 \(a[i],b[i]\) 的取值只有可能是 \(0,1\),进而可得所有的 \(C(a[i],b[i])\) 取值只有可能是 \(0,1\)。
如果我们要让 \(C(n,m)\) 为偶数,那么后面的所有 \(C(a[i],b[i])\) 绝对不能出现 \(0\),考虑怎么样才能让 \(C(n,m)\) 为 \(1\):
那么,我们只需要统计第二种情况的出现次数 \(ocnt\),租后答案就是 \(2^{ocnt}\)。
也就是统计 \(n\) 的二进制表示有多少个 \(1\)。
#include<cstdio>
#include<cmath>
int n,ocnt;
signed main(){
while(~scanf("%d",&n)){ocnt=0;
for(;n>0;n>>=1)if(n&1)++ocnt;
printf("%d\n",1<<ocnt);
}
return 0;
}
原文:https://www.cnblogs.com/Arextre/p/12755756.html