多项式及求和 By 浙江省镇海中学 杜瑜皓 (OI-WC2013)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4.d ≤ 200000, n ≤ 1010000 , m ≤ 1018 ,m为素数 关注Sd (x)这个多项式本身,我们可以在O(d log d)的时间内 算出Sd (1), Sd (2), . . . , Sd (d + 1) 而确定了Sd (1), Sd (2), . . . , Sd (d + 1)也就代表确定了这个多 项式。 多项式的系数能在O(d 2 )的时间内计算。
n−1
Sd (n) =
i=0
id
构造向量Vn = {Sd (n), n0 , n1 , . . . , nd }T 转移: Sd (n + 1) = Sd (n) + nd
1.d ≤ 50, n ≤ 1018 , m ≤ 1018 我们令
n−1
Sd (n) =
i=0
id
构造向量Vn = {Sd (n), n0 , n1 , . . . , nd }T 转移: Sd (n + 1) = Sd (n) + nd
∞ n=0 ∞ n=0
Bn n x n!
βn (t) n x x = x e tx = ( n! e −1
∞ n=0
Bn n x )( n!
∞ n=0
tn n x ) n!
3.d ≤ 2000, n ≤ 1010000 , m ≤ 1018 ,m为素数 我们定义伯努利数 x = x −1 e 定义伯努利多项式
d
(j + 1) 把j从0到n − 1求和
n−1
d+1
−j
d+1
=
i=0
d +1 i j i
n−1 d
(j + 1)d+1 − j d+1 =
j=0 j=0 i=0
d +1 i j i
也就是 n
d+1
d
=
i=0
d +1 Si (n) i
d
(j + 1) 把j从0到n − 1求和
n−1
d+1
−j
d+1
∞ n=0
tn n x n!
∞ n=0
βn (t + 1) − βn (t) n xe (t+1)x xe tx x = x − x n! e −1 e −1 = xe tx (e x − 1) = xe tx = x ex − 1
∞ n=0
tn n x n!
观察两边x n+1 的系数,即得 βn+1 (t + 1) − βn+1 (t) tn = (n + 1)! n!
wenku.baidu.com
4.d ≤ 200000, n ≤ 1010000 , m ≤ 1018 ,m为素数
4.d ≤ 200000, n ≤ 1010000 , m ≤ 1018 ,m为素数 关注Sd (x)这个多项式本身,我们可以在O(d log d)的时间内 算出Sd (1), Sd (2), . . . , Sd (d + 1)
多项式及求和
杜瑜皓
浙江省镇海中学
January 26, 2013
首先我们来看一个问题
n
i d mod m
i=0
首先我们来看一个问题
n
i d mod m
i=0
d ≤ 50, n ≤ 1018 , m ≤ 1018
首先我们来看一个问题
n
i d mod m
i=0
d ≤ 50, n ≤ 1018 , m ≤ 1018 d ≤ 200, n ≤ 1010000 , m ≤ 1018 ,m为素数
i
(n + 1) =
j=0
i
i j n j
1.d ≤ 50, n ≤ 1018 , m ≤ 1018 我们令
n−1
Sd (n) =
i=0
id
构造向量Vn = {Sd (n), n0 , n1 , . . . , nd }T 转移: Sd (n + 1) = Sd (n) + nd
i
(n + 1) =
2.d ≤ 200, n ≤ 1010000 , m ≤ 1018 ,m为素数 我们可以证明Sd (n)是关于n的d + 1次的多项式。 进行一下简单的数学推导
2.d ≤ 200, n ≤ 1010000 , m ≤ 1018 ,m为素数 我们可以证明Sd (n)是关于n的d + 1次的多项式。 进行一下简单的数学推导 d = 0时显然成立
A是一个(d + 2) ∗ (d + 2)的矩阵,具体系数可以通过前面的 转移方程得出。 用矩阵乘法加快速幂优化,那么就可以在O(d 3 log n)的时间 内解决。 这里并没有除法运算,所以和m取值的关系并不大。
2.d ≤ 200, n ≤ 1010000 , m ≤ 1018 ,m为素数
2.d ≤ 200, n ≤ 1010000 , m ≤ 1018 ,m为素数 我们可以证明Sd (n)是关于n的d + 1次的多项式。
=
i=0
d +1 i j i
n−1 d
(j + 1)d+1 − j d+1 =
j=0 j=0 i=0
d +1 i j i
也就是 n 即
d+1
d
=
i=0
d +1 Si (n) i
d−1
(d + 1) ∗ Sd (n) = n
d+1

i=0
d +1 Si (n) j
d−1
(d + 1) ∗ Sd (n) = nd+1 −
首先我们来看一个问题
n
i d mod m
i=0
d ≤ 50, n ≤ 1018 , m ≤ 1018 d ≤ 200, n ≤ 1010000 , m ≤ 1018 ,m为素数 d ≤ 2000, n ≤ 1010000 , m ≤ 1018 ,m为素数
首先我们来看一个问题
n
i d mod m
i=0
∞ n=0
βn (t + 1) − βn (t) n xe (t+1)x xe tx x = x − x n! e −1 e −1 = xe tx (e x − 1) = xe tx = x ex − 1
∞ n=0
tn n x n!
观察两边x n+1 的系数,即得 βn+1 (t + 1) − βn+1 (t) tn = (n + 1)! n! 就是 βn+1 (t + 1) − βn+1 (t) = (n + 1)t n 所以 Sd (n) = βd+1 (n) − βd+1 (0) d +1
右边显然是一个次数不超过d + 1次的多项式,并且通过这 个式子我们可以递推算出Sd (n)。 时间复杂度为O(d 3 + log n)。
3.d ≤ 2000, n ≤ 1010000 , m ≤ 1018 ,m为素数 我们定义伯努利数 x = x −1 e
∞ n=0
Bn n x n!
3.d ≤ 2000, n ≤ 1010000 , m ≤ 1018 ,m为素数 我们定义伯努利数 x = x −1 e 定义伯努利多项式
d ≤ 50, n ≤ 1018 , m ≤ 1018 d ≤ 200, n ≤ 1010000 , m ≤ 1018 ,m为素数 d ≤ 2000, n ≤ 1010000 , m ≤ 1018 ,m为素数 d ≤ 200000, n ≤ 1010000 , m ≤ 1018 ,m为素数
1.d ≤ 50, n ≤ 1018 , m ≤ 1018
2.d ≤ 200, n ≤ 1010000 , m ≤ 1018 ,m为素数 我们可以证明Sd (n)是关于n的d + 1次的多项式。 进行一下简单的数学推导 d = 0时显然成立 假设d = k时成立
2.d ≤ 200, n ≤ 1010000 , m ≤ 1018 ,m为素数 我们可以证明Sd (n)是关于n的d + 1次的多项式。 进行一下简单的数学推导 d = 0时显然成立 假设d = k时成立 当d = k + 1时
1.d ≤ 50, n ≤ 1018 , m ≤ 1018 我们令
n−1
Sd (n) =
i=0
id
1.d ≤ 50, n ≤ 1018 , m ≤ 1018 我们令
n−1
Sd (n) =
i=0
id
构造向量Vn = {Sd (n), n0 , n1 , . . . , nd }T
1.d ≤ 50, n ≤ 1018 , m ≤ 1018 我们令
∞ n=0 ∞ n=0
Bn n x n!
βn (t) n x x = x e tx = ( n! e −1
n
∞ n=0
Bn n x )( n!
∞ n=0
tn n x ) n!
也就是 βn (t) =
k=0
n Bn−k t k k
∞ n=0
βn (t + 1) − βn (t) n xe (t+1)x xe tx x = x − x n! e −1 e −1 = xe tx (e x − 1) = xe tx = x ex − 1
j=0
i
i j n j
Vn+1 = Vn ∗ A
A是一个(d + 2) ∗ (d + 2)的矩阵,具体系数可以通过前面的 转移方程得出。
A是一个(d + 2) ∗ (d + 2)的矩阵,具体系数可以通过前面的 转移方程得出。 用矩阵乘法加快速幂优化,那么就可以在O(d 3 log n)的时间 内解决。
经化简可得
m−1
kn =
k=0
1 n+1
n k=0
n+1 Bk mn+1−k k
经化简可得
m−1
kn =
k=0
1 n+1
n k=0
n+1 Bk mn+1−k k
在这个式子中,令m = 1且n = 0,那么就有
n k=0
n+1 1 Bk = 0 ⇒ Bn = − k n+1
n−1 k=0
n+1 Bk k
经化简可得
m−1
kn =
k=0
1 n+1
n k=0
n+1 Bk mn+1−k k
在这个式子中,令m = 1且n = 0,那么就有
n k=0
n+1 1 Bk = 0 ⇒ Bn = − k n+1
n−1 k=0
n+1 Bk k
另外证明可以参见顾宇宙大神JZPKIL的题解或《具体数 学》
于是我们可以在O(d 2 )的时间内算出伯努利数,然后算 出Sd (n)时间复杂度为O(d 2 + log n)。
d
Sd−1 (x) = P(x) =
k=0
x ak k
d
(j + 1)
d+1
−j
d+1
=
i=0
d +1 i j i
d
(j + 1)
d+1
−j
d+1
=
i=0
d +1 i j i
d
(j + 1) 把j从0到n − 1求和
n−1
d+1
−j
d+1
=
i=0
d +1 i j i
n−1 d
(j + 1)d+1 − j d+1 =
j=0 j=0 i=0
d +1 i j i
4.d ≤ 200000, n ≤ 1010000 , m ≤ 1018 ,m为素数 关注Sd (x)这个多项式本身,我们可以在O(d log d)的时间内 算出Sd (1), Sd (2), . . . , Sd (d + 1) 而确定了Sd (1), Sd (2), . . . , Sd (d + 1)也就代表确定了这个多 项式。 多项式的系数能在O(d 2 )的时间内计算。 我们定义
∞ n=0
βn (t + 1) − βn (t) n xe (t+1)x xe tx x = x − x n! e −1 e −1 = xe tx (e x − 1) = xe tx = x ex − 1
∞ n=0
tn n x n!
观察两边x n+1 的系数,即得 βn+1 (t + 1) − βn+1 (t) tn = (n + 1)! n! 就是 βn+1 (t + 1) − βn+1 (t) = (n + 1)t n
i=0
d +1 Si (n) j
d−1
(d + 1) ∗ Sd (n) = nd+1 −
i=0
d +1 Si (n) j
右边显然是一个次数不超过d + 1次的多项式,并且通过这 个式子我们可以递推算出Sd (n)。
d−1
(d + 1) ∗ Sd (n) = nd+1 −
i=0
d +1 Si (n) j
4.d ≤ 200000, n ≤ 1010000 , m ≤ 1018 ,m为素数 关注Sd (x)这个多项式本身,我们可以在O(d log d)的时间内 算出Sd (1), Sd (2), . . . , Sd (d + 1) 而确定了Sd (1), Sd (2), . . . , Sd (d + 1)也就代表确定了这个多 项式。
d
Sd−1 (x) = P(x) =
k=0
x ak k
4.d ≤ 200000, n ≤ 1010000 , m ≤ 1018 ,m为素数 关注Sd (x)这个多项式本身,我们可以在O(d log d)的时间内 算出Sd (1), Sd (2), . . . , Sd (d + 1) 而确定了Sd (1), Sd (2), . . . , Sd (d + 1)也就代表确定了这个多 项式。 多项式的系数能在O(d 2 )的时间内计算。 我们定义
相关文档
最新文档