Bzoj1485 有趣的数列[HNOI2009]
2015-07-01 21:41
375 查看
实就是从左往右扫每个数,把放在奇数项看作入栈,偶数看作出栈,然后就是一个求卡特兰数,但有些直接枚举质因数会超时,筛素数的时候对于每一个数只要记录它的最小质因子,然而出来在把每个数分解掉,比如60,最小质因子是2,变成30,又是2,边15,是3,变5,然后就没了,原来那种质因数分解发会枚举出许多不能再除的数,所以这种快一些
[code]#include<cstdio> #include<cstring> #define maxn 1000001 int n,mod,cnt; int zhishu[maxn],dy[2*maxn],tot[maxn]; bool flag[2*maxn]; long long ans=1; int shai() { for(int i=2;i<=2*n;i++) { if(!flag[i]) { zhishu[++cnt]=i; dy[i]=cnt; } for(int j=1;zhishu[j]*i<=2*n && j<=cnt;j++) { flag[zhishu[j]*i]=true; dy[zhishu[j]*i]=j; if(i%zhishu[j]==0) break; } } } int add(int x,int k) { while(x!=1) { tot[dy[x]]+=k; x/=zhishu[dy[x]]; } } void prework() { scanf("%d%d",&n,&mod); shai(); } void mainwork() { for(int i=n+1;i<=2*n;i++) add(i,1); for(int i=1;i<=n;i++) add(i,-1); add(n+1,-1); for(int i=1;i<=cnt;i++) while(tot[i]) { ans=(ans*zhishu[i])%mod; tot[i]--; } } void print() { printf("%lld",ans); } int main() { prework(); mainwork(); print(); return 0; }
相关文章推荐
- Head First 设计模式(2):观察者模式
- 进程间通信
- MATLAB实现pettitt检验
- [容斥原理]Bzoj1042 硬币购物[HAOI2008]
- 03 Java 并发 线程安全理论基础
- QT5.4 计算器程序 打包&发布,解决dll的最新解决方案
- Contains Duplicate
- 网络图片查看器的简单实现
- 黑马程序员——Java基础---线程的另一个总结(2)--定时器
- UI基础:UIButton.UIimage
- 简单的学籍管理系统
- Android_开源框架xUtils详解
- UI基础:UIButton.UIimage 分类: iOS学习-UI 2015-07-01 21:39 85人阅读 评论(0) 收藏
- 网站性能优化最佳实战
- [费马小定理]Bzoj3260 跳
- C#RAS加密算法
- bzoj 3998: [TJOI2015]弦论
- PortQry
- JavaScript中的数组
- 成功CRS启动的系统日志