HDU 4767 Bell (贝尔数 中国剩余定理 构造矩阵) ★ ★
来源:互联网 发布:宇宙模拟软件 编辑:程序博客网 时间:2024/04/28 11:31
斯特灵数[编辑]
在组合数学,Stirling数可指两类数,都是由18世纪数学家James Stirling提出的。
第一类[编辑]
第一类Stirling数是有正负的,其绝对值是个元素的项目分作个环排列的方法数目。常用的表示方法有。
换个较生活化的说法,就是有个人分成组,每组内再按特定顺序围圈的分组方法的数目。例如:
- {A,B},{C,D}
- {A,C},{B,D}
- {A,D},{B,C}
- {A},{B,C,D}
- {A},{B,D,C}
- {B},{A,C,D}
- {B},{A,D,C}
- {C},{A,B,D}
- {C},{A,D,B}
- {D},{A,B,C}
- {D},{A,C,B}
这可以用有向图来表示。
- 给定,有递归关系
递推关系的说明:考虑第n+1个物品,n+1可以单独构成一个非空循环排列,这样前n种物品构成k-1个非空循环排列,方法数为s(n,k-1);也可以前n种物品构成k个非空循环排列,而第n+1个物品插入第i个物品的左边,这有n*s(n,k)种方法。
是调和数的推广。
是递降阶乘多项式的系数:
第二类[编辑]
第二类Stirling数是个元素的集定义k个等价类的方法数目。常用的表示方法有。
换个较生活化的说法,就是有个人分成组的分组方法的数目。例如有甲、乙、丙、丁四人,若所有人分成1组,只有所有人在同一组这个方法,因此;若所有人分成4组,只可以人人独立一组,因此;若分成2组,可以是甲乙一组、丙丁一组,或甲丙一组、乙丁一组,或甲丁一组、乙丙一组,或其中三人同一组另一人独立一组,即是:
- {A,B},{C,D}
- {A,C},{B,D}
- {A,D},{B,C}
- {A},{B,C,D}
- {B},{A,C,D}
- {C},{A,B,D}
- {D},{A,B,C}
因此。
- 给定,有递归关系
- 递推关系的说明:考虑第n个物品,n可以单独构成一个非空集合,此时前n-1个物品构成k-1个非空的不可辨别的集合, 方法数为S(n-1,k-1);也可以前n-1种物品构成k个非空的不可辨别的 集合,第n个物品放入任意一个中,这样有k*S(n-1,k)种方法。
是二项式系数,B_n是贝尔数。
两者关系[编辑]
是克罗内克尔δ。
- 置换
- 整数数列
- 阶乘与二项式主题
HDU 4767 Bell (中国剩余定理)
题意:
Bell(n)是基数为n的集合的划分方法数。例如n = 3
{1, 2, 3}
{1} {2, 3}
{1, 2} {3}
{1, 3} {2}
{1} {2} {3}
所以Bell(3) = 5
给你一个n,求Bell(n) % 95041567的值
解题思路:
首先知道Bell(n) = S(n, 1) + S(n, 2) + ... S(n, n),S为第二类斯特灵数
然后google到结论。。 :若p为任意质数,则有Bell(n+p) = Bell(n) + Bell(n+1) (mod p)。
然后可以发现95041567分解质因子后为 31 * 37 * 41 * 43 * 47...都为质数。
利用矩阵二分幂可以很容易得到 Bell(n) % p (p = 31, 37, 41, 43, 47)的各个值,现在问题就变成了这种模型
X = a[i] (mod m[i]) (m[i]为质数),求X mod (m[1]*m[2]...m[k])的值。也就是中国剩余定理的
#include <stdio.h>int Md[] = {31, 37, 41, 43, 47};int s[6][55][55], w[6][55];// 第二类斯特灵数的预处理void init() { for(int i = 0;i < 5;i ++) s[i][0][0] = 1; for(int i = 1;i <= 50; i++) { for(int j = 0;j < 5;j ++) s[j][i][1] = 1; for(int j = 1;j <= i; j++) { for(int k = 0;k < 5; k++) s[k][i][j] = (s[k][i-1][j-1] + j*s[k][i-1][j])%Md[k]; } for(int j = 0;j < 5; j++) { w[j][i] = 0; for(int k = 1;k <= i; k++) w[j][i] = (w[j][i] + s[j][i][k])%Md[j]; } }}// 矩阵二分幂int pow_mod(int id, int n, int mod) { int a[55], aa[55], q[55][55], qq[55][55]; int sz = Md[id] + 1; for(int i = 1;i <= sz+1; i++) for(int j = 1;j <= sz+1; j++) q[i][j] = 0; for(int i = 1;i < sz; i++) q[i+1][i] = 1; q[2][sz] = q[3][sz] = 1; for(int i = 1;i <= sz; i++) a[i] = w[id][i]; if(n <= Md[id]) return a[n]; n --; while(n) { if(n & 1) { for(int i = 1;i <= sz; i++) { aa[i] = 0; for(int j = 1;j <= sz; j++) { aa[i] += a[j]*q[j][i]; } } for(int i = 1;i <= sz; i++) a[i] = aa[i]%mod; } for(int i = 1;i <= sz; i++) { for(int j = 1;j <= sz; j++) { qq[i][j] = 0; for(int k = 1;k <= sz; k++) { qq[i][j] += q[i][k]*q[k][j]; } qq[i][j] %= mod; } } for(int i = 1;i <= sz; i++) for(int j = 1;j <= sz; j++) q[i][j] = qq[i][j]; n /= 2; } return a[1];}// 扩展欧几里得int exgcd(int a, int b, int &x, int &y) { if(!b) { x = 1; y = 0; return a; } int ret = exgcd(b, a%b, y, x); y -= a/b*x; return ret;}// 中国剩余定理int china(int n, int a[], int m[]) { int M = 1; for(int i = 0;i < n; i++) M *= m[i]; int ret = 0; for(int i = 0;i < n; i++) { int w = M/m[i], x, y; int d = exgcd(w, m[i], x, y); ret = (ret + x*w*a[i])%M; } return (ret + M)%M;}int x[55];int main() { init(); int t, n; scanf("%d", &t); while(t--) { scanf("%d", &n); for(int i = 0;i < 5;i ++) { // 求Bell(n) % 各个质数的值 x[i] = pow_mod(i, n, Md[i]); } int ans = china(5, x, Md); printf("%d\n", ans); }}
- HDU 4767 Bell (贝尔数 中国剩余定理 构造矩阵) ★ ★
- Hdu4767 Bell (贝尔数 中国剩余定理 构造矩阵)
- 贝尔数 hdu4767 (矩阵快速幂+中国剩余定理+bell数+Stirling数+欧几里德)
- HDU4767 Bell 中国剩余定理 贝尔数 第二类斯特灵数
- hdu 4767 bell 中国剩余定理+矩阵快速幂
- HDU 4767 Bell (中国剩余定理)
- HDU 4767 Bell (中国剩余定理)
- Bell数+中国剩余定理
- Bell - HDU 4767 贝尔数
- Bell(hdu4767+矩阵+中国剩余定理)
- hdu 4746 Bell 中国剩余定理+矩阵乘法+第二类斯特林数 (2013网络赛)
- Bell(矩阵快速幂+中国剩余定理)
- 贝尔(Bell)数
- HDU 中国剩余定理
- 中国剩余定理-数硬币
- HDU 1788 中国剩余定理
- HDU 1370(中国剩余定理)
- hdu-1573(中国剩余定理)
- [js] 垃圾收集 内存泄漏
- 【规则引擎连载5】 WebSphere ILOG JRules 开发——与Rule Team Server交互
- KMP算法详解
- Xcode(各版本)遇到的问题及其解决方案
- Kconfig
- HDU 4767 Bell (贝尔数 中国剩余定理 构造矩阵) ★ ★
- TFS部署:create_block allocate space error. ret: -1, error: 28, error desc: No space left on device
- PHP input file 上传时后台 获取是空的解决办法
- LoadRunner常见问题分析及解决办法
- 华为2
- iOS nil、Nil、NULL、NSNull的区别(null)与<null>的处理: -[NSNull length]: unrecognized selector sent to instance
- tensorflow某些函数的小坑(持续更新)
- 记一次JS执行顺序引起的问题排查过程
- 使用Flexible实现手淘H5页面的终端适配