HDU 4349 Xiao Ming's Hope

一、题目

题目描述

C ( n , 0 ) , C ( n , 1 ) . . . C ( n , n ) C(n,0),C(n,1)...C(n,n) 有多少个是奇数

数据范围

1 n 1 e 8 1\leq n\leq 1e8

二、解法

这道题只关乎奇偶性,所以可以默认模数为 2 2 ,我们尝试用 lucas \text{lucas} ,设 a a n n 的二进制分解, b b i i 的二进制分解。

C ( a , b ) = C ( a [ k ] , b [ k ] ) . . . . × C ( a [ 1 ] , a [ 1 ] ) % 2 C(a,b)=C(a[k],b[k])....\times C(a[1],a[1])\%2 ,那么我们必须要保证每一项都是 1 1 ,当 a a 的那一位是 0 0 时, b b 只能取 0 0 ,但是 a a 1 1 b b 可以取 0 / 1 0/1 ,所以问题变成了求 n n 的二进制分解的 1 1 的个数 k k ,然后输出 2 k 2^k 即可。

#include <cstdio>
int read()
{
    int x=0,flag=1;char c;
    while((c=getchar())<'0' || c>'9') if(c=='-') flag=-1;
    while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
    return x*flag;
}
int n,m;
signed main()
{
	while(~scanf("%d",&n))
	{
		m=0;
		while(n>0)
		{
			if(n&1) m++;
			n/=2;
		}
		printf("%d\n",1<<m);
	}
}
原创文章 430 获赞 14 访问量 1万+

猜你喜欢

转载自blog.csdn.net/C202044zxy/article/details/105682695