题目大意:给你两个多项式$f(x)$和$g(x)$,满足$f(x)=\prod\limits_{i=1}^{n}(a_i+1)$,$g(x)=\prod\limits_{i=1}^{m}(b_i+1)$。

现在给你一个多项式$h(x)$,满足$h(x)=\prod\limits_{i=1}^{n}\prod\limits_{j=1}^{m}(a_ib_j+1)$

请输出多项式$h$的前$k$项,在模$998244353$意义下进行。

数据范围:$n,m≤10^5$。

我们现在有:

$f(x)=\prod\limits_{i=1}^{n}(a_i+1)$

我们在等式两边都取对数,然后泰勒展开,得到:

$\begin{align} ln \big(f(x)\big) =&\sum\limits_{i=1}^{n} ln(a_i+1) \\=&\sum\limits_{i=1}^{n} \sum_{k=1}^{\infty} \frac{(-1)^{k+1}}{k}x^ka_i^{k}\end{align}$

我们不难推出:

$[x^k]ln(f(x))=\sum\limits_{i=1}^{n} \frac{(-1)^{k+1}}{k}a_i^{k}$

$g(x)$同理。

我们现在来考虑$h(x)$,我们现在有:

$h(x)=\prod\limits_{i=1}^{n}\prod\limits_{j=1}^{m}(a_ib_j+1)$

和上面一样,我们在等式两边都取对数,然后泰勒展开,得到:

$\begin{align}
ln\big(h(x)\big) =&\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}ln(a_ib_j+1)\\
=&\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\sum_{k=1}^{\infty} \frac{(-1)^{k+1}}{k}x^ka_i^{k}b_j^{k}\\
=&\sum\limits_{k=1}^{\infty}x^k \sum\limits_{i=1}^{n} \frac{(-1)^{k+1}}{k}a_i^{k}\sum\limits_{i=1}^{m} b_i^{k}\\
=&\sum\limits_{k=1}^{\infty}\frac{k}{(-1)^{k+1}}x^k \sum\limits_{i=1}^{n} \frac{(-1)^{k+1}}{k}a_i^{k}\sum\limits_{i=1}^{m} \frac{(-1)^{k+1}}{k}b_i^{k}\\
\end{align}$

我们不难推出:

$\begin{align}[x^k]ln(h(x))=&\frac{k}{(-1)^{k+1}} \sum\limits_{i=1}^{n} \frac{(-1)^{k+1}}{k}a_i^{k}\sum\limits_{i=1}^{m} \frac{(-1)^{k+1}}{k}b_i^{k}\\
=&\frac{k}{(-1)^{k+1}}[x^k]ln\big(f(x)\big)[x^k]ln\big(g(x)\big)
\end{align}$

我们可以考虑,用多项式求$ln$,求出$ln\big(f(x)\big)$和$ln\big(g(x)\big)$,然后求出$ln(h(x))$后再用多项式$exp$算回去,就得到多项式$h$了。

套一个多项式的板子就可以了。

完结撒花

 #include<bits/stdc++.h>
#define M (1<<19)
#define L long long
#define MOD 998244353
#define G 3
using namespace std; L pow_mod(L x,L k){
L ans=;
while(k){
if(k&) ans=ans*x%MOD;
x=x*x%MOD; k>>=;
}
return ans;
} void change(L a[],int n){
for(int i=,j=;i<n-;i++){
if(i<j) swap(a[i],a[j]);
int k=n>>;
while(j>=k) j-=k,k>>=;
j+=k;
}
}
void NTT(L a[],int n,int on){
change(a,n);
for(int h=;h<=n;h<<=){
L wn=pow_mod(G,(MOD-)/h);
for(int j=;j<n;j+=h){
L w=;
for(int k=j;k<j+(h>>);k++){
L u=a[k],t=w*a[k+(h>>)]%MOD;
a[k]=(u+t)%MOD;
a[k+(h>>)]=(u-t+MOD)%MOD;
w=w*wn%MOD;
}
}
}
if(on==-){
L inv=pow_mod(n,MOD-);
for(int i=;i<n;i++) a[i]=a[i]*inv%MOD;
reverse(a+,a+n);
}
} void getinv(L a[],L b[],int n){
if(n==){b[]=pow_mod(a[],MOD-); return;}
static L c[M],d[M];
memset(c,,n<<); memset(d,,n<<);
getinv(a,c,n>>);
for(int i=;i<n;i++) d[i]=a[i];
NTT(d,n<<,); NTT(c,n<<,);
for(int i=;i<(n<<);i++) b[i]=(*c[i]-d[i]*c[i]%MOD*c[i]%MOD+MOD)%MOD;
NTT(b,n<<,-);
for(int i=;i<n;i++) b[n+i]=;
} void qiudao(L a[],L b[],int n){
memset(b,,sizeof(b));
for(int i=;i<n;i++) b[i-]=i*a[i]%MOD;
}
void jifen(L a[],L b[],int n){
memset(b,,sizeof(b));
for(int i=;i<n;i++) b[i+]=a[i]*pow_mod(i+,MOD-)%MOD;
} void getln(L a[],L b[],int n){
static L c[M],d[M];
memset(c,,n<<); memset(d,,n<<);
qiudao(a,c,n); getinv(a,d,n);
NTT(c,n<<,); NTT(d,n<<,);
for(int i=;i<(n<<);i++) c[i]=c[i]*d[i]%MOD;
NTT(c,n<<,-);
jifen(c,b,n);
} void getexp(L a[],L b[],int n){
if(n==){b[]=; return;}
static L lnb[M]; memset(lnb,,n<<);
getexp(a,b,n>>); getln(b,lnb,n);
for(int i=;i<n;i++) lnb[i]=(a[i]-lnb[i]+MOD)%MOD,b[i+n]=;
lnb[n]=;
lnb[]=(lnb[]+)%MOD;
NTT(lnb,n<<,); NTT(b,n<<,);
for(int i=;i<(n<<);i++) b[i]=b[i]*lnb[i]%MOD;
NTT(b,n<<,-);
for(int i=;i<n;i++) b[i+n]=;
} int n,m,k,len;
L f[M]={},g[M]={},h[M]={},lf[M]={},lg[M]={},lh[M]={}; int main(){
scanf("%d%d%d",&n,&m,&k);
for(len=;len<=(n+m+);len<<=);
for(int i=;i<=n;i++) scanf("%lld",f+i);
for(int i=;i<=m;i++) scanf("%lld",g+i);
getln(f,lf,len);
getln(g,lg,len);
for(int i=;i<len;i++) lh[i]=(lf[i]*lg[i]%MOD*(i&?i:-i)%MOD+MOD)%MOD;
getexp(lh,h,len);
for(int i=;i<k;i++) printf("%lld ",h[i]);
}

【xsy2978】Product of Roots 生成函数+多项式ln+多项式exp的更多相关文章

  1. 【XSY2730】Ball 多项式exp 多项式ln 多项式开根 常系数线性递推 DP

    题目大意 一行有\(n\)个球,现在将这些球分成\(k\) 组,每组可以有一个球或相邻两个球.一个球只能在至多一个组中(可以不在任何组中).求对于\(1\leq k\leq m\)的所有\(k\)分别 ...

  2. CF838C(博弈+FWT子集卷积+多项式ln、exp)

    传送门: http://codeforces.com/problemset/problem/838/C 题解: 如果一个字符串的排列数是偶数,则先手必胜,因为如果下一层有后手必赢态,直接转移过去,不然 ...

  3. 洛谷P5245 【模板】多项式快速幂(多项式ln 多项式exp)

    题意 题目链接 Sol \(B(x) = \exp(K\ln(A(x)))\) 做完了... 复杂度\(O(n\log n)\) // luogu-judger-enable-o2 // luogu- ...

  4. [xsy2978]Product of Roots

    $\newcommand{align}[1]{\begin{align*}#1\end{align*}}$题意:给出$f(x)=\prod\limits_{i=1}^n(a_ix+1)$和$g(x)= ...

  5. 多项式求ln,求exp,开方,快速幂 学习总结

    按理说Po姐姐三月份来讲课的时候我就应该学了 但是当时觉得比较难加上自己比较懒,所以就QAQ了 现在不得不重新弄一遍了 首先说多项式求ln 设G(x)=lnF(x) 我们两边求导可以得到G'(x)=F ...

  6. 【BZOJ3456】轩辕朗的城市规划 无向连通图计数 CDQ分治 FFT 多项式求逆 多项式ln

    题解 分治FFT 设\(f_i\)为\(i\)个点组成的无向图个数,\(g_i\)为\(i\)个点组成的无向连通图个数 经过简单的推导(枚举\(1\)所在的连通块大小),有: \[ f_i=2^{\f ...

  7. P6295-有标号 DAG 计数【多项式求逆,多项式ln】

    正题 题目链接:https://www.luogu.com.cn/problem/P6295 题目大意 求所有\(n\)个点的弱联通\(DAG\)数量. \(1\leq n\leq 10^5\) 解题 ...

  8. 多项式 ln

    多项式 ln 定义 \(给一多项式F(x),求G(x)\equiv lnF(x)\pmod x^n\) 前置知识 \(不定积分\) \(微分\) \(多项式乘法逆\) 推式子: \[\because ...

  9. luogu P4725 多项式对数函数(多项式 ln)

    LINK:多项式对数函数 多项式 ln 如题 是一个模板题.刚学会导数 几个知识点 \([f(x)\cdot g(x)]'=f(x)'g(x)+f(x)g(x)',f(g(x))'=f'(g(x))g ...

随机推荐

  1. python实践项目一:Collatz函数

    要求1:编写一个名为 collatz()的函数,它有一个名为 number 的参数.如果参数是偶数,那么 collatz()就打印出 number // 2, 并返回该值.如果 number 是奇数, ...

  2. varnish缓存清理

    本篇日志应该较早该去写的,一直脱了好久,直到最近才写.在使用任务cache工具时,都会提到的一个问题.如何只清理想清理的那部分缓存,而其已缓存的部分不受影响 .这里就要用到varnishadm工具,先 ...

  3. [Visual Studio] - Unable to launch the IIS Express Web server 问题之解决

    背景 Visual Studio 2015 在 Debug 模式下调试失败. 错误 解决 删除解决方案下 .vs/config 文件夹,重新运行解决方案可进行调试. 参考资料 https://stac ...

  4. 用php的for循环输出四边形,各种三角形和菱形【含空心版本】

    <?php // 实心版 //四边形 for( $i = 1; $i <=5; $i++ ){ for( $j = 1; $j <=5; $j++ ){ echo '*'; } ec ...

  5. python学习-40 生产者和消费者模型

    import time def buy(name): # 消费者 print('%s上街去买蛋' %name) while True: eggs=yield print('%s买了%s' %(name ...

  6. youku项目总结(粗略总结)

    一.ORM 之前我们都是以文件保存的形式存储数据,这次我们用的是数据库结合python使用,用到 ORM:关系型映射 类>>数据库的一张表 对象>>表一条记录 对象.属性> ...

  7. Python开发【第二章】:数据类型

    基本数据类型 一.整型 如: 18.73.84 整型具备如下功能: class int(object): """ int(x=0) -> int or long i ...

  8. xorm表结构操作实例

    获取数据库信息 package main import ( "fmt" _ "github.com/go-sql-driver/mysql" "git ...

  9. 写一个vue的滚动条插件

    组件源码如下: vue-scroll.vue <template> <div class="vue-scroll" ref="vueScrollW&qu ...

  10. 关键字:__thread & pthread_key_t

    在说__thread之前,先来看看pthread_ket_t吧. 参考:http://blog.csdn.net/lmh12506/article/details/8452700 上面的博文说的比较通 ...