Description

称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很大,只能输出模P以后的值

Input

输入文件的第一行包含两个整数 n和p,含义如上所述。

Output

输出文件中仅包含一个整数,表示计算1,2,⋯, ���的排列中, Magic排列的个数模 p的值。

Sample Input

20 23

Sample Output

16

HINT

100%的数据中,1 ≤ ��� N ≤ 106, P��� ≤ 10^9,p是一个质数。 数据有所加强

/*
求n个数组成小根堆的方案数。
设f[i]为以i为根的小根堆方案数。
f[i]=C(sz[i]-1,sz[i*2])*f[i*2]*f[i*2+1]。
最神奇的是被lucas坑了一把,当n>mod时预处理就成0啦!!!
*/
#include<iostream>
#include<cstdio>
#define N 1000010
#define lon long long
using namespace std;
int n,mod,hal[N],sz[N];
lon inv[N],jc1[N],jc2[N];
void init(){
inv[]=inv[]=;for(int i=;i<=n;i++) inv[i]=((mod-mod/i)*inv[mod%i])%mod;
jc1[]=;for(int i=;i<=n;i++) jc1[i]=(jc1[i-]*i)%mod;
jc2[]=;for(int i=;i<=n;i++) jc2[i]=(jc2[i-]*inv[i])%mod;
}
lon C(int n,int m){
if(n<m) return ;
if(n>mod||m>mod) return (C(n%mod,m%mod)*C(n/mod,m/mod))%mod;
else return ((jc1[n]*jc2[m])%mod*jc2[n-m])%mod;
}
void dfs1(int x){
sz[x]=;
if(x*<=n) dfs1(x*),sz[x]+=sz[x*];
if(x*+<=n) dfs1(x*+),sz[x]+=sz[x*+];
}
lon dfs2(int x){
if(x*>n) return ;
lon tot=C(sz[x]-,sz[x*]);
if(x*<=n) tot=(tot*dfs2(x*))%mod;
if(x*+<=n) tot=(tot*dfs2(x*+))%mod;
return tot;
}
int main(){
scanf("%d%d",&n,&mod);
init();
dfs1();
printf("%d",dfs2());
return ;
}

最新文章

  1. 实例化Model的三种方式
  2. USBDongle及Btool使用说明
  3. 深入理解JAVA I/O系列六:Linux中的IO模型
  4. jmeter随笔(23)--在csv中维护变量参数
  5. poj2761
  6. angularJS的核心特性
  7. html&amp;CSS初学
  8. TimeSpan类【转】
  9. 微信公众号开发之网页中及时获取当前用户Openid及注意事项
  10. jquery与js实现全选功能的区别---2017-05-12
  11. Django总结
  12. 勤拂拭软件系列教程 之 Android开发之旅
  13. android 工具库
  14. Swagger-概述
  15. java BIO/NIO
  16. opencv输出图片像素值
  17. Pandas对行情数据的预处理
  18. yum卸载失败Error in PREUN scriptlet in rpm package postgresql-server
  19. JIRA - 使用指南(项目跟踪管理工具)
  20. ANTLR4权威指南 - 第7章 通过特定应用程序代码解耦语法

热门文章

  1. java基础面试题:switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
  2. vue学习之路 - 1.初步感知
  3. Spring Boot 前世今生
  4. Java - 若try中有return语句,finally会执行吗?在return之前还是之后呢?
  5. windows 时间同步至最新时间方法 | windows 时间同步服务器
  6. 【CSS】css控制模块到顶层或底层
  7. Matlab数据转化至python端,并写入数据库
  8. Flask学习笔记:数据库迁移操作flask-script+alembic/flask-migrate
  9. Codeforces Round #460 (Div. 2)-B. Perfect Number
  10. 1180: [CROATIAN2009]OTOCI(LCT)