1.统计因子2的个数
借鉴一个数学方法:统计数为n的因子为i的个数(与下面所述等同)
计算1~n之间包含一个因子i的个数的简单算法就是:
cnt = 0; while (n) { n /= i; cnt += n; }
代码如下:
#include<stdio.h>
int main()
{
int a,b,c,m,n,k;
while(scanf("%d %d",&n,&k)==2)
{
m=n-k;a=b=c=0;
while(n=n>>1) a+=n;
while(m=m>>1) b+=m;
while(k=k>>1) c+=k;
if(a>b+c)
printf("0\n");
else
printf("1\n");
}
return 0;
}
2.利用一个公式
如果(N & k) == k,那么就是1,否则是0(看不懂)
先写在这边
代码如下:
#include<stdio.h>
int main()
{
int n,k;
while(scanf("%d %d",&n,&k)==2)
{
printf("%d\n",(n & k)== k?1:0);
}
return 0;
}
题目如下:
二项式系数C(n, k)因它在组合数学中的重要性而被广泛地研究。二项式系数可以如下递归的定义:
C(1, 0) = C(1, 1) = 1;
C(n, 0) = 1对于所有n > 0;
C(n, k) = C(n − 1, k − 1) + C(n − 1, k)对于所有0 < k ≤ n。
给出n和k,你要确定C(n, k)的奇偶性。