4613. 【NOIP2016模拟7.12】求和

题目描述

4613. 【NOIP2016模拟7.12】求和_第1张图片
n < = 1 0 5 n<=10^5 n<=105

题目分析

  • 我们惊喜地发现这竟然是一道数论题。
  • 第二类斯特林数定义 S ( n , m ) S(n,m) S(n,m)定义
  • 首先关于第二类斯特林数有一个特别重要的公式。
  • S ( i , j ) = 1 j ! ∗ ∑ k = 1 j ( − 1 ) k ∗ C j k ∗ ( j − k ) i S(i,j)=\frac{1}{j!}*\sum_{k=1}^{j}(-1)^k*C_j^k*(j-k)^i S(i,j)=j!1k=1j(1)kCjk(jk)i
  • 这是一个容斥,枚举有多少个集合是空的,但最后因为每一个集合是相同的,所以要除以 j ! j! j!
  • 然后我们把这个东西套进题目的式子里:
  • ∑ i = 0 n ∑ j = 0 i S ( i , j ) ∗ 2 j ∗ j ! \sum_{i=0}^n\sum_{j=0}^iS(i,j)*2^j*j! i=0nj=0iS(i,j)2jj!
  • = ∑ i = 0 n ∑ j = 0 n S ( i , j ) ∗ 2 j ∗ j ! =\sum_{i=0}^n\sum_{j=0}^nS(i,j)*2^j*j! =i=0nj=0nS(i,j)2jj!
  • = ∑ j = 0 n 2 j ∗ j ! ∗ ∑ i = 0 n S ( i , j ) =\sum_{j=0}^n2^j*j!*\sum_{i=0}^nS(i,j) =j=0n2jj!i=0nS(i,j)
  • = ∑ j = 0 n 2 j ∗ j ! ∗ ∑ i = 0 n 1 j ! ∗ ∑ k = 1 j ( − 1 ) k ∗ C j k ∗ ( j − k ) i =\sum_{j=0}^n2^j*j!*\sum_{i=0}^n\frac{1}{j!}*\sum_{k=1}^{j}(-1)^k*C_j^k*(j-k)^i =j=0n2jj!i=0nj!1k=1j(1)kCjk(jk)i
  • = ∑ j = 0 n 2 j ∗ j ! ∗ ∑ i = 0 n 1 j ! ∗ ∑ k = 1 j ( − 1 ) k ∗ j ! k ! ( j − k ) ! ∗ ( j − k ) i =\sum_{j=0}^n2^j*j!*\sum_{i=0}^n\frac{1}{j!}*\sum_{k=1}^{j}(-1)^k*\frac{j!}{k!(j-k)!}*(j-k)^i =j=0n2jj!i=0nj!1k=1j(1)kk!(jk)!j!(jk)i
  • = ∑ j = 0 n 2 j ∗ j ! ∗ ∑ i = 0 n ∑ k = 1 j ( − 1 ) k ∗ ( j − k ) i k ! ( j − k ) ! =\sum_{j=0}^n2^j*j!*\sum_{i=0}^n\sum_{k=1}^{j}(-1)^k*\frac{(j-k)^i}{k!(j-k)!} =j=0n2jj!i=0nk=1j(1)kk!(jk)!(jk)i
  • = ∑ j = 0 n 2 j ∗ j ! ∗ ∑ k = 1 j ∑ i = 0 n ( − 1 ) k ∗ ( j − k ) i k ! ( j − k ) ! =\sum_{j=0}^n2^j*j!*\sum_{k=1}^{j}\sum_{i=0}^n(-1)^k*\frac{(j-k)^i}{k!(j-k)!} =j=0n2jj!k=1ji=0n(1)kk!(jk)!(jk)i
  • = ∑ j = 0 n 2 j ∗ j ! ∗ ∑ k = 1 j ( − 1 ) k k ! ∑ i = 0 n ( j − k ) i ( j − k ) ! =\sum_{j=0}^n2^j*j!*\sum_{k=1}^{j}\frac{(-1)^k}{k!}\sum_{i=0}^n\frac{(j-k)^i}{(j-k)!} =j=0n2jj!k=1jk!(1)ki=0n(jk)!(jk)i
  • 用等比数列求和,可得:
  • = ∑ j = 0 n 2 j ∗ j ! ∗ ∑ k = 1 j ( − 1 ) k k ! ∗ ( j − k ) n + 1 − 1 ( j − k − 1 ) ( j − k ) ! =\sum_{j=0}^n2^j*j!*\sum_{k=1}^{j}\frac{(-1)^k}{k!}*\frac{(j-k)^{n+1}-1}{(j-k-1)(j-k)!} =j=0n2jj!k=1jk!(1)k(jk1)(jk)!(jk)n+11
  • 经过了一系列转折,我们终于接近终点,我们设:
  • f ( i ) = ( − 1 ) i i ! f(i)=\frac{(-1)^i}{i!} f(i)=i!(1)i g ( i ) = i n + 1 − 1 ( i − 1 ) ∗ i ! g(i)=\frac{i^{n+1}-1}{(i-1)*i!} g(i)=(i1)i!in+11
  • 所以原式 = ∑ j = 0 n 2 j ∗ j ! ∗ ∑ k = 1 j f ( k ) ∗ g ( j − k ) =\sum_{j=0}^n2^j*j!*\sum_{k=1}^{j}f(k)*g(j-k) =j=0n2jj!k=1jf(k)g(jk)
  • 我们发现这是一个标准的卷积,所以用NTT求即可。
  • 时间复杂度 O ( n l o g 2 n ) O(nlog_2n) O(nlog2n)

你可能感兴趣的:(数学,NTT,预处理)