$f(n)=\sum\limits_{i=0}^{n} \sum\limits_{j=0}^{i} S(i,j) \times 2^j \times j!$

其中$S(i,j)$为第二类斯特林数,公式为$S(i,j)=\frac{1}{j!} \sum\limits_{k=0}^{j} (-1)^k C(j,k) (j-k)^i$

求$f(n)$,$n<=100000$,答案对$998244353(=2^{23} \times 7 \times 17 + 1)$取模

$f(n)=\sum\limits_{i=0}^{n} \sum\limits_{j=0}^{i} 2^j \times \sum\limits_{k=0}^{j} (-1)^k \times \frac{j!}{k! \times (j-k)!} \times (j-k)^i$

$=\sum\limits_{i=0}^{n} \sum\limits_{j=0}^{i} 2^j \times j! \times \sum\limits_{k=0}^{j} \frac{(j-k)^i}{(j-k)!} \times \frac{(-1)^k}{k!}$

$=\sum\limits_{j=0}^{n} 2^j \times j! \times \sum\limits_{k=0}^{j} \frac{\sum\limits_{i=0}^{n}(j-k)^i}{(j-k)!} \times \frac{(-1)^k}{k!}$

可以发现,$\sum\limits_{i=0}^{n}(j-k)^i$项就是一个等比数列求和,可以快速幂求出。

那么两个分数分别只与j-k和k有关了,相乘的话,就是卷积形式FFT求出,枚举最外层j即可。

Update10/04:

终于抽出时间码完啦,少打了一个等号调了半天~

 #include<cstdio>
#define mod 998244353
#define int long long
int rev[],bin=,n,fac[],inv[],invv[],INV,sumpw[];
int a[],b[],sum;
int pow(int b,int t,int a=){for(;t;t>>=,b=b*b%mod)if(t&)a=a*b%mod;return a;}
void NTT(int *a,int opt){
for(int i=;i<bin;++i)if(i<rev[i])a[i]^=a[rev[i]]^=a[i]^=a[rev[i]];
for(int mid=,wn=pow(,mod->>);mid<bin;mid<<=,wn=pow(,(mod-)//mid*opt+mod-))
for(int i=;i<bin;i+=mid<<)
for(int j=,w=;j<mid;++j,w=w*wn%mod){
int x=a[i+j],y=a[i+j+mid]*w%mod;
a[i+j]=(x+y)%mod;a[i+j+mid]=(mod+x-y)%mod;
}
if(opt==-)for(int i=;i<bin;++i)a[i]=a[i]*INV%mod;
}
main(){
scanf("%lld",&n);
while(bin<=n<<)bin<<=;//printf("%lld\n",bin);
for(int i=;i<bin;++i)rev[i]=rev[i>>]>>|(i&)*bin>>;
INV=pow(bin,mod-);
fac[]=inv[]=invv[]=fac[]=inv[]=sumpw[]=;
for(int i=;i<=n;++i)fac[i]=fac[i-]*i%mod,invv[i]=-mod/i*invv[mod%i]%mod+mod,inv[i]=inv[i-]*invv[i]%mod;
sumpw[]=n+;for(int i=;i<=n;++i)sumpw[i]=(pow(i,n+)-)*invv[i-]%mod;
for(int i=;i<=n;++i)a[i]=sumpw[i]*inv[i]%mod,b[i]=pow(mod-,i)*inv[i]%mod;//,printf("%lld %lld\n",a[i],b[i]);
NTT(a,);NTT(b,);
for(int i=;i<bin;++i)a[i]=a[i]*b[i]%mod;
NTT(a,-);//for(int i=0;i<bin;++i)printf("%lld\n",a[i]);
for(int j=;j<=n;++j)sum=(sum+pow(,j)*fac[j]%mod*a[j])%mod;
printf("%lld\n",sum);
}

求和:fft,表达式化简的更多相关文章

  1. B/b.cpp:表达式化简,二分答案

    不知道能不能粘题面于是不粘了. 首先声明这道题可以怎么水过: 随机化几万次操作,取最优答案. 暴力O(n2log n)可过. 不想打正解的可以走了. emm然而我的应该是正解,O(n log n). ...

  2. 【mongoDB高级篇②】大数据聚集运算之mapReduce(映射化简)

    简述 mapReduce从字面上来理解就是两个过程:map映射以及reduce化简.是一种比较先进的大数据处理方法,其难度不高,从性能上来说属于比较暴力的(通过N台服务器同时来计算),但相较于grou ...

  3. HDU.2503 a/b + c/d (分式化简)

    a/b + c/d Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  4. F. Anton and School 位运算 + 化简

    http://codeforces.com/contest/734/problem/F 因为 x + y = (x & y) + (x | y) 有了这个公式后,然后应该手动模拟一下,把公式化 ...

  5. matlab化简符号表达式

    化简符号表达式计算机毕竟还是挺笨的, 经过一系列的符号计算后, 得到的结果可能只有它自己才能看懂, Matlab提供大量函数以用于符号表达式的化简. collect(f): 函数用途是合并多项式中相同 ...

  6. NOIP201402比例化简

    比例化简 [问题描述]在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有 1498 人,反对的有 902 人,那么赞同与反对的比例可以简单的记为1498:9 ...

  7. YZOI Easy Round 2_化简(simplify.c/cpp/pas)

    Description 给定一个多项式,输出其化简后的结果. Input 一个字符串,只含有关于字母x 的多项式,不含括号与分式,没有多余的空格. Output 一个字符串,化简后的多项式,按照次数从 ...

  8. 化简复杂逻辑,编写紧凑的if条件语句

    当业务逻辑很复杂,涉及多个条件的真假,或者多种条件下都会执行同一动作时,如何编写紧凑的if语句呢?本文借由一个实际例子,利用数学的布尔逻辑整理条件,最终产生if语句. 问题 在<X3 重聚> ...

  9. 《Linear Algebra and Its Application》-chaper1-行化简法解决线性方程组

    在实际生产生活中,需要我们解大量的线性方程组,例如是有探测.线性规划.电路等,这里我们便从理论角度建立一套解决线性方程组的体系. 线性方程组: 形如下面形式的方程组称为线性方程组. 回想起解决二元线性 ...

随机推荐

  1. sbt 学习笔记(1)sbt安装和交互式界面使用

    下载sbt: http://www.scala-sbt.org/download.html 解压zip文件F:\sbt-0.13.15 配置环境变量 如果需要可以修改F:\sbt-0.13.15\sb ...

  2. Video/audio标签的一些基础使用心得

    常用方法 .play():用于音频视频的播放 .pause():用于音频视频的暂停 常用属性 <audio src="Batmobile Battle Mode Reveal Musi ...

  3. css浮动产生和清除浮动的几种方式

    浮动的语法:float:left/right; 浮动float的原本设计了作用初衷是为了实现文字环绕效果 浮动产生负作用: 1.背景不能显示 2.边框不能撑开父元素 3.margin padding设 ...

  4. SEER见证人操作指南

    SEER的见证人设计 共识方式 在区块生产者的产生方式上,SEER采取了PoS的共识方式,用户通过智能合约抵押自己持有的SEER竞选主力见证人(区块生产者). 对于SEER区块链来说,制约区块链TPS ...

  5. 算法学习之剑指offer(十一)

    一 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. import java.util.*; ...

  6. RF中for循环

    robotframework支持FOR循环语句,语法和Python的语法基本相同,但robotframework中,“FOR”关键字前面需要增加一个“:”,写成“:FOR”,其它与Python的语法相 ...

  7. Android Studio 1.5运行问题

    Error:Unable to start the daemon process: could not reserve enough space for object heap.Please assi ...

  8. JavaScript正则表达式之语法

    Regular Expressions翻译成中文叫正则表达式.也不知道是谁翻译过来的,听起来就很严肃.似乎翻译成通用表达式更能传达其精髓. 为什么叫通用表达式?因为它有一套和编程语言无关的文本匹配规则 ...

  9. [Luogu2458][SDOI2006]保安站岗

    题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下超市的所有通道呈一棵树的形状:某些通道之间可以互 ...

  10. 3. Rsync-远程同步(下)-企业案例

    已知3台服务器主机名分别为web01.backup .nfs主机信息见下表: 角色 外网IP(NAT) 内网IP(LAN) 主机名 WEB eth0:10.0.0.7 eth1:172.16.1.7 ...