zoukankan      html  css  js  c++  java
  • HDU4349--Xiao Ming's Hope(数论)

    输入一个n(1<=n<=108),求C(n,0),C(n,1),C(n,2)...C(n,n)有多少个奇数。

    Lacus定理 http://blog.csdn.net/acm_cxlove/article/details/7844973

    A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。

    则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0])  modp同

    所以此题中 C(n, x) 将n和x化成2进制 C(0,0)=1,C(0,1)=0,C(1,0)=1,C(1,1)=1

    所以如果C(n,x)为1,那么n为0的位置x必为0,n为1的位置x为0或1

    答案为2^(n的二进制表示1的个数)

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    
    int main()
    {
        int n, c;
        while (~scanf("%d", &n)) {
            c = 0;
            while (n) {
                if (n & 1) ++c;
                n >>= 1;
            }
            printf("%d
    ", (int)pow(2, c));
        }
        return 0;
    }
    

      

  • 相关阅读:
    MQ
    redis
    MongoDB
    进程相关命令
    catalina.sh
    tomcat-jvm
    中间件简介
    websphere
    mysql
    shell变量与字符串操作
  • 原文地址:https://www.cnblogs.com/wenruo/p/5148499.html
Copyright © 2011-2022 走看看