组合数
c(n,k)(k<=n)的奇偶性取决于(n-k)与k的二进制表达式是否存在同一位上的两个数码均为1,若存在,则为偶数,反之为奇数。
求c(n,k)可以通过公式
C(n, 0) = C(n, n) = 1 for all n > 0;
C(n, k) = C(n − 1, k − 1) + C(n − 1, k) for all 0 < k < n.
递归并保存值,这里用一个二维数组array[n][k],但是考虑到有的题n比较大,数组存不下。
还可以通过代码:
View Code
1 View Code 2 1 #include <iostream> 3 2 #include <stdio.h> 4 3 using namespace std; 5 4 6 5 void function(int m,int n) 7 6 { 8 7 int k,t,i,p; 9 8 k=m-n<n?m-n:n; 10 9 t=m-n>=n?m-n:n; 11 10 p=1; 12 11 for(i=1;i<=k;i++) 13 12 p+=p*t/i; 14 13 printf("%d\n",p%2); 15 14 } 16 15 17 16 int main() 18 17 { 19 18 int m,n; 20 19 while(scanf("%d%d",&m,&n)!=EOF) 21 20 { 22 21 funtion(m,n); 23 22 } 24 23 return 0; 25 24 }