FHJ学长的心愿

原题链接,点我进去

题意

给你一个数N,让你求在$$C^{0}{n} \ C{1}_{n} C{2}{n}\ \dots \ C^{n}_{n}$$中有几个组合数是奇数。

解题思路

出题人CX学长给的题解:

本题实际上是考察的Lucas定理。

Lucas定理:(写程序的时候后半部分可以递归求)

设\(P\)为素数,则:

\[C^{m}_{n}(\% P)=C^{m\%P}_{n\%P}∗C^{⌊m/P⌋}_{⌊n/P⌋}(\%P)
\]

一句话概括,就是一个组合数可以拆成\(P\)进制下的乘积,如下:(与上式本质相同)

\[n = n_{k}*p^{k}+n_{k-1}*p^{k-1}+...+n_{1}*p+n_0
\]

\[m = m_{k}*p^{k}+m_{k-1}*p^{k-1}+...+m_{1}*p+m_0
\]

则(上式实际上也就是把\(n,m\)分解成了\(P\)进制的形式):

\[C^{m}_{n}(\% P)=C^{m_{k}}_{n_{k}}∗C^{m_{k-1}}_{n_{k-1}}*...*C^{m_{0}}_{n_{0}}(\%P)
\]

当\(P = 2\)的时候,其实就只有四种情况:\(,,,,,C_1^0, C_0^1, C_0^0, C_1^1\),其中只有\(C_0^1 =0\),其余都是1。

那么对于这个题,我们实际上要找的就是在\(C_n^0...C_n^n\)中有多少个 \(C_n^m\)满足\(C_n^m\%2=1\)。

对于给定的\(n\),我们去考虑\(m\),如果对应\(n\)的二进制位为0,那么\(m\)对应的二进制位只能为0(因为\(C_0^1 =0\)),如果对应\(n\)的二进制位为1,那么\(m\)对应的二进制位可以为1也可以为0。(这样也保证了统计的\(m\leq n\))。

所以答案就是n的二进制中1的位置取0或1的所有可能。即\(2^{cnt}\),\(cnt\)为\(n\)的二进制中1的个数。

这个题有人竟然通过找规律找出来的,真强。

代码实现

#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
while (scanf("%d", &n) != EOF) {
int cnt = 0;
while (n) {
if (n & 1) cnt++;
n >>= 1;
}
printf("%d\n", 1 << cnt);
}
return 0;
}

FHJ学长的心愿 QDUOJ 数论的更多相关文章

  1. lb开金矿 QDUOJ 数论

    lb开金矿 QDUOJ 数论 原题链接,点我进去 题意 大家都知道lb有n个小弟(编号从2到n+1),他们可以按照规则传递信息:某天编号为i的小弟收到信息后,那么第二天他会给编号为j的小弟传达信息,其 ...

  2. XDTIC2019招新笔试题 + 官方解答

    腾讯创新俱乐部2019年招新笔试试题   [1] 小宗学长正在努力学习数论,他写下了一个奇怪的算式: \[ 2019^{2018^{2017^{\dots^{2^1}}}} \] 算式的结果一定很大, ...

  3. BZOJ-2190 仪仗队 数论+欧拉函数(线性筛)

    今天zky学长讲数论,上午水,舒爽的不行..后来下午直接while(true){懵逼:}死循全程懵逼....(可怕)Thinking Bear. 2190: [SDOI2008]仪仗队 Time Li ...

  4. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  5. 洛谷P2312 解方程 [noip2014] 数论

    正解:数论 解题报告: 这儿是,传送门qwq 又是很妙的一道题呢,专门用来对付我这种思维僵化了的傻逼的QAQ 首先看题目的数据范围,发现a<=1010000,很大的一个数据范围了呢,那这题肯定不 ...

  6. 【BZOJ1053】[HAOI2007]反素数 (搜索+数论)

    \([POI2002][HAOI2007]\)反素数 题目描述 对于任何正整数x,其约数的个数记作\(g(x)\).例如\(g(1)=1.g(6)=4\). 如果某个正整数x满足:\(g(x)> ...

  7. 数论day1 —— 基础知识(们)

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61632537 向大(hei)佬(e)势力学(di ...

  8. HRBUST 1211 火车上的人数【数论解方程/模拟之枚举+递推】

    火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起(包括第3站 ...

  9. LZH的多重影分身 qduoj 思维 差分

    LZH的多重影分身 qduoj 思维 差分 原题链接:https://qduoj.com/problem/591 题意 在数轴上有\(n\)个点(可以重合)和\(m\)条线段(可以重叠),你可以同时平 ...

随机推荐

  1. vue项目刷新页面,使数据不丢失(sessionStorage、localStorage、cookie)

    vue项目刷新页面时,存储在vuex中的数据会丢失,把他们存到stroage中可以保证不丢失.

  2. Struts 2 实现Action的几种方式_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Action用于处理用户的请求,因此也被称为业务控制器.每个Action类就是一个工作单元,Struts 2框架负责将用 ...

  3. UVALive 3211 : Now or later 【2-SAT】

    题目链接 题意及题解参见lrj训练指南 #include<bits/stdc++.h> using namespace std; ; struct TwoSAT { int n; vect ...

  4. anaconda历史版本下载

    anaconda历史版本安装: anaconda所有版本链接:https://repo.continuum.io/archive/ 清华大学开源软件镜像站:https://mirrors.tuna.t ...

  5. redis 日志等级说明

    redis loglevel 安装默认的设置为 verbose 1)debug:会打印出很多信息,适用于开发和测试阶段 2)verbose(冗长的):包含很多不太有用的信息,但比debug要清晰一些 ...

  6. (四)mysql -- 常用函数

    今天get一个,先记录一下 以后慢慢补充~ 将varchar转换成int 例如:select * from tb_1 order by cast(sport_sum as unsigned integ ...

  7. 运行Spark官方提供的例子

    去spark官网把spark下载下来: https://spark.apache.org/downloads.html 解压,可以看下目录: 其中examples目录下提供了java,scala,py ...

  8. 利用Lucene.net搜索引擎进行多条件搜索的做法

    利用Lucene.net搜索引擎进行多条件搜索的做法 2018年01月09日 ⁄ 搜索技术 ⁄ 共 613字 ⁄ 字号 小 中 大 ⁄ 评论关闭 利用Lucene.net搜索引擎进行多条件搜索的做法 ...

  9. 和他人一起管理GitHub仓库

    和他人一起管理 GitHub 仓库方法 打开一个项目的仓库 同意好之后在项目中要添加 README.md 文件(重要) 要让别人也可以使用 master 主线 在上传代码前,一定要使用 git 指令 ...

  10. db2表结构导出导入,数据库备份

    1.新增用户组.用户和查看所有用户: 新增系统用户组: #groupadd jldb //增加用户组jldb 需使用root权限 useradd jldb -g jldb //将新增用户赋值到jldb ...