c(n,k)奇偶性判断.cpp

来自「很高效的判断组合数C(n,k)的奇偶性。 巧妙的使用了位运算。时间复杂度为O(」· C++ 代码 · 共 24 行

CPP
24
字号
/*
C(n,k)%2==1得出  n!中 2的因子 等于 (n-k)!与k!中2的因子之和
所以 n/2+n/4+n/8+...+0==(n-k)/2+k/2+(n-k)/4+k/4+(n-k)/8+k/8+....+0+0

而  n/2>=(n-k)/2+k/2(取==条件为(n-k),k不能同时为奇数  也就是k,(n-k)二进制位最后一位至少有一个为0)
  再n=n/2,k=k/2;  同理可以得出k,(n-k)二进制倒数第二位至少有一个为0
  依此类推
 整理结论 得出 ((n-k)&k)==0
这个式子应该和  (n&k)==k等价

*/
#include    <stdio.h>

int         n , k , t;
int         main()
{
           while(scanf("%d%d",&n,&k)==2&&(n || k))
           {
                 t = n&k;
                 if( t == k)
                        printf("1\n"); else printf("0\n");                             
           } 
           return 0;
} 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?