博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1485: [HNOI2009]有趣的数列
阅读量:4880 次
发布时间:2019-06-11

本文共 987 字,大约阅读时间需要 3 分钟。

卡特兰数。

这道题打下表可以看出前几项是卡特兰数(怎么想到打表和卡特兰数?我事先看了题解,为了确认一下。)

因为p不是质数,所以不能用乘法逆元。

我们可以把C(2*n,n)/(n+1)的每一项分解成一个质数,然后乘,这样就可以了。

#include
#include
#include
#define LL long long using namespace std;const int maxn = 2000000 + 10;int prime[maxn],m[maxn],s[maxn];bool mark[maxn];int n,cnt,mod;LL res=1;void getpri() { for(int i=2;i<=2*n;i++) { if(!mark[i]) {prime[++cnt]=i; m[i]=cnt;} for(int j=1;j<=cnt;j++) { if(prime[j]*i>2*n) break; mark[prime[j]*i]=1; m[prime[j]*i]=j; if(i%prime[j]==0) break; } }}void add(int x,int f) { while(x!=1) { s[m[x]]+=f; x/=prime[m[x]]; }}int main() { scanf("%d%d",&n,&mod); getpri(); for(int i=n+2;i<=2*n;i++) add(i,1); for(int i=1;i<=n;i++) add(i,-1); for(int i=1;i<=cnt;i++) while(s[i]--) res=(res*prime[i])%mod; printf("%lld\n",res); return 0; }

转载于:https://www.cnblogs.com/invoid/p/5639159.html

你可能感兴趣的文章
并查集hdu4424
查看>>
【异常】IOException parsing XML document from class path resource [xxx.xml]
查看>>
第五周作业
查看>>
COJ 2135 Day10-例1
查看>>
jdbc之分页查询
查看>>
PHP手动环境搭建之WAMP
查看>>
COJ 1003 WZJ的数据结构(三)ST表
查看>>
sbrk and coreleft
查看>>
树型DP
查看>>
怎么在ubuntu上使用pidgin登陆QQ
查看>>
思维的惰性
查看>>
2018-2019-2 网络对抗技术 20165115 Exp3 免杀原理与实践
查看>>
【Android】学习记录<1> -- 初识ffmpeg
查看>>
定位页面元素的位置
查看>>
关于IAsyncResult接口的CompletedSynchronously属性
查看>>
Python:一篇文章掌握Numpy的基本用法
查看>>
序列化与ArrayList 的elementData的修饰关键字transient
查看>>
学习进度17
查看>>
编译原理——算符优先分析文法(附源代码)
查看>>
jboss的启动过程
查看>>