参照于:http://blog.sina.com.cn/s/blog_4dc813b20100w5g8.html
http://blog.sina.com.cn/s/blog_8e6023de010153ik.html 公式的推导
http://blog.csdn.net/millky/article/details/3206730 组合数奇偶性的判断
首先,如果M是偶数,那么S(N,M)≡S(N-1,M-1)(mod2)。所以只需要考虑(M=2m+1)为奇数的情况。
同理:S(2m+k, 2m+1)≡ [
下面考察k,且将S(2m+1+k, 2m+1)记为F(k, m)
则上式可化为F(k, m) ≡[F(k, m-1)+F(k-1, m-1)+ ... +F(0, m-1)](mod2)
且F(k,0)≡S(1+k, 1)≡1(mod2)
于是有:
于是,问题转化为判断C(n,k)的奇偶性问题,有如下结论:
n&k == k,则C(n,k)为奇数
否则,C(n,k)为偶数。注意上述过程中M与m的区别。
代码
#include <stdio.h>
#include <string.h>
int main()
{
int T;
int n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&n,&m);
int k=n-m;
if(m%2==0)
{
n--;
m--;
}
n-=(m+1)/2;
if((n&k)==k)
printf("1\n");
else
printf("0\n");
}
return 0;
}