BZOJ 1485 HNOI 2009 有趣的数列 卡特兰数 线性筛法分解质因数
来源:互联网 发布:java 搜狐畅言 编辑:程序博客网 时间:2024/06/10 06:14
题意:
题解:如果我们按顺序取元素,那么分别往奇数项数列与偶数项数列尾添加就能满足最后的要求。
而且如果保证在取元素的时候奇数项数列的总数总是不小于偶数项数列的总数,就能满足相邻奇数位小于偶数位,因为这么要求可以保证插入偶数项数列尾的数字必定大于奇数项列所有元素,因此肯定满足要求。而且这么取元素覆盖了所有情况。
要求奇数项数列数总不小于偶数项数列数,便和出入栈问题等价,因此答案就是卡特兰数。
听说有人打表看出了。。
普通筛法应该是
线性筛法:
首先我们要避免筛法重复筛一个数,因此考虑在筛关于
线性筛法最重要的一点就是从小到达枚举质数直到
这么考虑,第一次枚举到
由于有
#include <cstdio>#define FOR(i,j,k) for(i=j;i<=k;++i)typedef long long ll;const int N = 2000001;ll qpow(ll a, ll b, ll p) { ll c = 1; for (; b; b /= 2, a = a * a % p) if (b & 1) c = c * a % p; return c;}int pri[N], dy[N], tot[N], vis[N];int add(int x, int k) { for (; x != 1; x /= pri[dy[x]]) tot[dy[x]] += k;}int main() { ll ans = 1, p; int n, c = 0, i, j; scanf("%d%lld", &n, &p); FOR(i,2,2*n) { if (!vis[i]) { pri[++c] = i; dy[i] = c; } FOR(j,1,c) { if (pri[j] * i > 2 * n) break; vis[pri[j] * i] = 1; dy[pri[j] * i] = j; if(i % pri[j] == 0) break; } } FOR(i,n+2,2*n) add(i, 1); FOR(i,1,n) add(i, -1); FOR(i,1,c) ans = ans * qpow(pri[i], tot[i], p) % p; printf("%lld", ans); return 0;}
1485: [HNOI2009]有趣的数列
Description
我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件:
(1)它是从1到2n共2n个整数的一个排列{ai};(2)所有的奇数项满足a1<a3<…<a2n-1,所有的偶数项满足a2<a4<…<a2n;(3)任意相邻的两项a2i-1与a2i(1≤i≤n)满足奇数项小于偶数项,即:a2i-1<a2i。现在的任务是:对于给定的n,请求出有多少个不同的长度为2n的有趣的数列。因为最后的答案可能很大,所以只要求输出答案 mod P的值。
Input
输入文件只包含用空格隔开的两个整数n和P。输入数据保证,50%的数据满足n≤1000,100%的数据满足n≤1000000且P≤1000000000。
Output
仅含一个整数,表示不同的长度为2n的有趣的数列个数mod P的值。
Sample Input
3 10
Sample Output
5
Hint
对应的5个有趣的数列分别为(1,2,3,4,5,6),(1,2,3,5,4,6),(1,3,2,4,5,6),(1,3,2,5,4,6),(1,4,2,5,3,6)。
- BZOJ 1485 HNOI 2009 有趣的数列 卡特兰数 线性筛法分解质因数
- bzoj 1485: [HNOI2009]有趣的数列 (卡特兰数)
- bzoj 1485: [HNOI2009]有趣的数列 卡特兰数
- BZOJ 1485: [HNOI2009]有趣的数列 卡特兰数
- bzoj 1485 [HNOI2009]有趣的数列 卡特兰数
- NKOJ 3798 有趣的数列 (卡特兰数+线性筛)
- bzoj 1485 有趣的数列 卡特兰数 + 数论 %p 不为质数
- bzoj1485: [HNOI2009]有趣的数列 卡特兰数
- 【题】【数学(卡特兰数)】NKOJ3798 有趣的数列
- bzoj 1485 卡特兰数
- 【bzoj1485:】【 [HNOI2009]有趣的数列】模任意数的卡特兰数
- bzoj1485 [HNOI2009]有趣的数列 ( 组合数 + 卡特兰数)
- [BZOJ1485][HNOI2009]有趣的数列(卡特兰数+组合数学)
- HDU 3398 String 组合数学+N!质因数分解 卡特兰数
- hdu 3240 卡特兰数+质因数分解+扩展欧几里得求乘法逆元
- 分解质因数-洛谷P3200 [HNOI2009]有趣的数列
- 卡特兰数一个有趣的应用模型及小结
- smoj2009(线性筛+数学求卡特兰数)
- debug运行正常,release报错
- 2013上半年—嵌入式系统开发—末考
- iOS软件开发--OC--ARC自动引用计数
- Java FTP工具类
- [iOS]列表已读/文章收藏
- BZOJ 1485 HNOI 2009 有趣的数列 卡特兰数 线性筛法分解质因数
- 2013上半年—Linux操作系统—末考
- 隐藏标题栏
- Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of its dependencies could not be r
- CentOS/RHEL启动不起来-问题解决
- android:screenOrientation属性
- excel怎么转换成pdf格式的文件
- 2013上半年—嵌入式系统开发—实验
- proc