博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 3501 PA2008 Cliquers Strike Back——贝尔数
阅读量:6293 次
发布时间:2019-06-22

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

题目:

用贝尔三角形 p^2 地预处理 p 以内的贝尔数。可以模(mod-1)(它是每个分解下的质因子的倍数,所以不影响分开算的时候)。

用公式:\( Bell[n+p^{m}]=m*Bell[n]+Bell[n+1] (mod p) \)  \( Bell[n+p]=Bell[n]+Bell[n+1] (mod p) \)  把 n 看成 p 进制,O( p^2 * log m ) 地算。

  大概就是从低位走到高位。一开始自己的 b 数组是 Bell[ 0 ] ~ Bell[ p ] ;枚举每一个 p 进制位(从第二位,即 p1 开始),在该位上枚举从1到d[ i ],做一次让角标 + pi 的操作;

  这样做完,自己的 b 数组存的就是 Bell[ d[m-1]*pm-1+d[m-2]*pm-2+...+0 ] ~ Bell[ d[m-1]*pm-1+d[m-2]*pm-2+...+p ] 的值。只要输出 b[ d[0] ] 就行了。

借鉴Claris的模板。

#include
#include
#include
#include
#define ll long longusing namespace std;const int mod=999999599,M=mod-1,N=7283;ll n,m; int p[5]={
2,13,5281,7283},ans,f[N+5],s[2][N+5];void upd(int &x,int md){x>=md?x-=md:0;}int pw(int x,int k,int md){
int ret=1;while(k){
if(k&1)ret=(ll)ret*x%md;x=(ll)x*x%md;k>>=1;}return ret;}int calc(ll n,int p){ if(n<=N)return f[n]%p; int b[N+5],c[N+5],d[65],lm=0; for(int i=0;i<=p;i++)b[i]=f[i]%p; while(n)d[lm++]=n%p,n/=p; for(int i=1;i

 

转载于:https://www.cnblogs.com/Narh/p/10066825.html

你可能感兴趣的文章
不要将时间浪费到编写完美代码上
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>
jquery中hover()的用法。简单粗暴
查看>>
线程管理(六)等待线程的终结
查看>>
spring boot集成mongodb最简单版
查看>>
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>