hdu 4767 Bell
思路:矩阵快速幂+中国剩余定理!!
查资料得到2个公式:
1) B[n+p] = B[n] + B[n+1] mod p ;
2) B[p^m+n] = m*B[n] + B[n+1] mod p .
用这两个都可以解决这个问题,第二个可以在0ms解决。
质因数分解95041567=31*37*41*43*47,用矩阵快速幂分别求出B[n]%p (p是95041567的质因子)的结果。
这样就得到5个同余等式,在用中国剩余定理求解既可。
代码如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#define M 51
#define mod 95041567
#define ll __int64
using namespace std;
int p[]={,,,,},a[],bell[M][M];
struct Mat
{
int m[M][M];
};
Mat Mul(Mat a,Mat b,int n)
{
Mat ans;
for(int i=;i<n;i++)
for(int j=;j<n;j++){
ans.m[i][j]=;
for(int k=;k<n;k++)
ans.m[i][j]+=a.m[i][k]*b.m[k][j];
ans.m[i][j]%=n;
}
return ans;
}
int Pow(int n,int m)
{
Mat ans,a;
memset(ans.m,,sizeof(ans.m));
memset(a.m,,sizeof(a.m));
a.m[][m-]=a.m[][m-]=;
for(int i=;i<m-;i++) a.m[i+][i]=;
for(int i=;i<m;i++) ans.m[][i]=bell[i][i]%m;
while(n){
if(n&) ans=Mul(ans,a,m);
n>>=;
a=Mul(a,a,m);
}
return ans.m[][];
}
void init()
{
int i,j;
bell[][]=;bell[][]=;
for(i=;i<M;i++){
bell[i][]=bell[i-][i-];
for(j=;j<=i;j++) bell[i][j]=(bell[i][j-]+bell[i-][j-])%mod;
}
}
void gcd_extend(int a,int b,ll &x,ll &y)
{
if(b==){
x=;y=;
return ;
}
gcd_extend(b,a%b,x,y);
ll t=x;
x=y;
y=t-a/b*y;
}
int china()
{
ll ans=,x,y;
for(int i=;i<;i++){
int t=mod/p[i];
gcd_extend(t,p[i],x,y);
ans=(ans+a[i]*t*((x%p[i]+p[i])%p[i]))%mod;
}
return ans;
}
int main(){
int t,n;
init();
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=;i<;i++)
a[i]=Pow(n,p[i]);
printf("%d\n",china());
}
return ;
}
hdu 4767 Bell的更多相关文章
- HDU 4767 Bell(矩阵+中国剩余定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4767 题意:给出n.求n有多少种划分集合的方式,即bell(n) 思路: #include <i ...
- 2013长春网赛1009 hdu 4767 Bell(矩阵快速幂+中国剩余定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4767 题意:求集合{1, 2, 3, ..., n}有多少种划分情况bell[n],最后结果bell[ ...
- HDU 4767——Bell
昨天比赛被虐的这个题目. 今天听斌牛讲过他的思路后就A掉了. 题目的意思是要你求出bell数的第n项对95041567取模. 首先,95041567=31*37*41*43*47: 然后取模就是先分别 ...
- HDU 4767
昨晚苦恼了一晚,因为即将大三了,必须要准备实习什么的事了.一般都会去公司实习吧,但是看看自己的简历,实在拿不出手,因为大一大二都在搞ACM(虽然真正搞的只有大二一年),但却没有什么成绩,又不愿意做项目 ...
- Bell(hdu4767+矩阵+中国剩余定理+bell数+Stirling数+欧几里德)
Bell Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- Bell(矩阵快速幂+中国剩余定理)
Bell Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- hdu 5445 Food Problem 多重背包
Food Problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5 ...
- hdu 5445 多重背包
Food Problem Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- HDU 2512 一卡通大冒险(第二类斯特林数+贝尔数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2512 题目大意:因为长期钻研算法, 无暇顾及个人问题,BUAA ACM/ICPC 训练小组的帅哥们大部 ...
随机推荐
- zoj 2334 Monkey King/左偏树+并查集
原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1389 大致题意:N只相互不认识的猴子(每只猴子有一个战斗力值) 两只 ...
- libmemcached upcoming ISO C++ standard, C++0x
在编译我的小程序的时候,触发了一个编译错误,程序中使用了libmemcached,错误如下: 1 2 3 4 5 6 7 8 9 In file included from /usr/lib/gcc/ ...
- UIAlertController——之Block回调
iOS8.0之后出现的提示框 =.=,比自己去改block回调要好.
- iOS学习之Object-C语言简单的通讯录管理系统
用这几天学的OC的知识,写了一个实现简单功能的通讯录管理系统,在这里分享给大家: 通讯录管理系统 * 需求: 1.定义联系人类Contact.实例变量:姓名(拼音,首字母大写).性别.电话号码.住址 ...
- 服务器 IIS 发布网站 支持下载 apk 和 ipa
方法/步骤 1 打开IIS服务管理器,找到服务器,右键-属性,打开IIS服务属性: 2 单击MIME类型下的"MIME类型"按钮,打开MIME类型设置窗口: 3 单击" ...
- Android -- 倒计时的实现
CountDownTimer CountDownTimer这个 ...
- jQuery多库共存处理
jQuery多库共存处理(来自慕课网) 多库共存换句话说可以叫无冲突处理. 总的来说会有2种情况会遇到: 1.$太火热,jQuery采用$作为命名空间,不免会与别的库框架或者插件相冲突. 2.jQue ...
- xml基础学习笔记02
接着上次的xml笔记01 ,记录一下如何DOM创建xml 一.由于没有特意来写博客,都是在程序中用注释的方法记录笔记,整理过来难免格式错误,排版什么的,大家好事看不懂就仔细看给出的代码加上注释,一定会 ...
- ThinkDev.Logging-Queue模块介绍
Queue,ThinkDev.Logging对内存级队列的封装. 主要针对需要简单进程内内存级队列提供支持,应用无需关心存储及线程. 配置例子: <!-- 队列对象 --> <Que ...
- python 字典列表排序operator.itemgetter()
举例: import operator x = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}] sorted_x = sorted(x, ...