題目大意:
求
答案對\(10^9 + 7\)取模。
首先,我們發現
設r=r可以矩陣乘法求。
根據斯特林數的
原式可化為
設所求為\(f_k(n)\)。
對於\(r=1\)的情況,自然數冪求和即可。\(o(k+logn)\)。
所以,
由上述暴力展開的情況可以發現,存在乙個關於\(n\)的\(m\)次多項式\(f_m(n)\),
使得\(f_m(n)=f_m(n)r^-f_m(0)r\),利用上述的展開方式也可歸納證明這個結論。
所以,求出\(f_m(n)\)即可,由於它是\(m\)次多項式,所以,求出\(f_m(0)到f_m(m)\)即可插值求出\(f_m(n)\)。
因為\(f_m(n)-f_m(n-1)=f_m(n)r^-f_m(n-1)r^n=n^m r^n\),所以\(f_m(n)r-f_m(n-1)=n^m\),
即\(f_m(n)=\frac\)。
設\(f_m(0)=x\),那麼\(f_m(i)\)就能表示為\(k_ix+b_i\)的形式。
那麼,我們只要再找一條\(f_m\)的等量關係即可求出。
代入到上一條式子,即可得出
(其實就是說m次多項式的m+1次差分等於0,這條式子可以保證\(f_m\)形成乙個m次多項式)。
這樣,我們就能求出\(f_m(0)到f_m(m)\),再通過插值,即可求出\(f_m(n)\),進而求出答案。
通過線性篩,可以在計算質數\(p\)的\(p^m\)後線性地算出所有正整數\(x\)的\(x^m\)。
時間複雜度為\(o(\frac*log_2(m))=o(m)\)。
總時間複雜度\(o(k+logn)\)。
**:
#include #define md 1000000007
#define ll long long
int ny[200010],jc[200010],jn[200010];
int c(int n,int m)
int ksm(int a,int b)
return jg;
}int getfib(ll x)
for(int i=s-1;i>=0;i--)
}return c;
}int qz[200010],hz[200010];
int jisuan(int sz[200010],int n,ll x)
for(int i=n;i>=0;i--)
int ans=0;
for(int i=0;i<=n;i++)
}}int main()
yucl(k+1,k);
int r=(getfib(r+2)-1+md)%md;
if(r==1)
else
int hk=0,hb=0;
for(int i=0;i<=k+1;i++)
f[0]=1ll*(md-hb)*ksm(hk,md-2)%md;
for(int i=1;i<=k;i++)
f[i]=(1ll*k[i]*f[0]+b[i])%md;
int fn=jisuan(f,k,n);
int ans=1ll*fn*ksm(r,(n+1)%(md-1))%md;
ans=(ans-1ll*f[0]*r%md+md)%md;
printf("%d\n",ans);
}fclose(stdin);
fclose(stdout);
return 0;
}
斯特林數 斯特林反演
第一類stirling數 s n,m 也可記為 beginn m end 第一類stirling分為無符號第一類stirling數 s u n,m 和帶符號第一類stirling數 s s n,m 他們分別表現為其公升階函式和降階函式的各項係數,形式如下 x x cdot x 1 cdot x 2 ...
數學 斯特林子集數 斯特林輪換數 尤拉數
斯特林子集數 第二類斯特林數 從把n個不同的小球放到k個相同的盒子裡,且每個盒子至少要有乙個小球的選法。快速計算一行斯特林數 使用這個式子 frac sum limits m 1 i binom m i n 把上式變形 frac sum limits m 1 i frac m i n sum lim...
斯特林數(Stirling)
第一類斯特林數表示的是將n個不同元素分成k個不同的環的方案數。兩個環不相同當且僅當這兩個環不能通過旋轉得到。記作s n,k 遞推關係的說明 1.考慮第n個物品,n可以單獨構成乙個非空迴圈排列,這樣前n 1種物品構成k 1個非空迴圈排列,方法數為s n 1,k 1 2.也可以前n 1種物品構成k個非空...