题面
给定 n
,求组合数 (0n),(1n),…,(nn)
这 n+1
个数中值为奇数的个数。
数据范围:
1≤n≤1018
题目链接
分析
这个题很水,但是有点意思。
首先根据 Lucas 定理,我们可以得知:
(mn)…≡(mmod2nmod2)⋅(m/2n/2)(mod2)≡(mmod2nmod2)⋅(m/2mod2n/2mod2)⋅(m/4n/4)(mod2)
也就是说,记 Mi
为 m
二进制的第 i
位,Ni
为 n
二进制的第 i
位,同时记 n
的二进制有 k
位,则:
(mn)≡i=1∏k(MiNi)(mod2)
显然,若要使得 (mn)≡1(mod2)
,则对每一项都须有 (MiNi)≡1(mod2)
。
如果 Ni=0
,那么当且仅当 Mi=0
时才会有 (MiNi)≡1(mod2)
,而如果 Ni=1
,那么不论 Mi
取何值都有 (MiNi)≡1(mod2)
。因此,奇数的个数实际上就是所有 Ni=1
位上 Mi
的组合种数。记 n
的二进制值为 1
的位数为 h
,那么由乘法原理答案显然就为 2h
。
实现
完整参考代码