传送门
一眼题。。。
注意不能有行末空格233
分析一下显然有 g = I k ∗ f g=I^k*f g=Ik∗f
直接上狄利克雷卷积+快速幂即可。。。
复杂度 O ( n log n 2 ) O(n\log n^2) O(nlogn2)
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int rlen=1<<18|1;
inline char gc(){
static char buf[rlen],*ib,*ob;
(ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin));
return ib==ob?-1:*ib++;
}
inline int read(){
int ans=0;
char ch=gc();
while(!isdigit(ch))ch=gc();
while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();
return ans;
}
typedef long long ll;
const int mod=1e9+7;
inline int add(const int&a,const int&b){
return a+b>=mod?a+b-mod:a+b;}
inline int dec(const int&a,const int&b){
return a>=b?a-b:a-b+mod;}
inline int mul(const int&a,const int&b){
return (ll)a*b%mod;}
inline void Add(int&a,const int&b){
a=a+b>=mod?a+b-mod:a+b;}
inline void Dec(int&a,const int&b){
a=a>=b?a-b:a-b+mod;}
inline void Mul(int&a,const int&b){
a=(ll)a*b%mod;}
inline int ksm(int a,int p){
int ret=1;for(;p;p>>=1,a=mul(a,a))if(p&1)Mul(ret,a);return ret;}\
const int N=1e5+5;
struct poly{
vector<int>a;
poly