前言:
作为一名OIer,数学推导一定不能差。
例子:
用尽量快的方法求以下式子:
- ∑i=0n−1ai∗bn−1−i (n∈N+)
- ∑i=0n−1(−1)i∗an−1−i∗bi (2∣n)
- ∑i=0n−1(−1)i∗an−1−i∗bi (n=2k+1,k∈N+)
- ∑i=1ni2
用∑只是为了好看,建议读者把求和式展开。
公式:
- an−bn=(a−b)∗∑i=0n−1ai∗bn−1−i (n∈N+)
- an−bn=(a+b)∗∑i=0n−1(−1)i∗an−1−i∗bi (2∣n)
- an+bn=(a+b)∗∑i=0n−1(−1)i∗an−1−i∗bi (n=2k+1,k∈N+)
- ∑i=1ni2=n∗(n+1)∗(2n+1)/6
推导:
1. an−bn=(a−b)∗∑i=0n−1ai∗bn−1−i (n∈N+)
右边=i=1∑nai∗bn−i−i=0∑n−1ai∗bn−i
=an∗b0−a0∗bn=an−bn
2. an−bn=(a+b)∗∑i=0n−1(−1)i∗an−1−i∗bi (2∣n)
右边=i=0∑n−1(−1)i∗an−i∗bi−i=1∑n(−1)i−1∗an−i∗bi=an−bn
3. 类似2的证明。
4. ∑i=1ni2=n∗(n+1)∗(2n+1)/6
n3−(n−1)3=1∗[n2+(n−1)2+n(n−1)]
=n2+(n−1)2+n2−n
=2∗n2+(n−1)2−n
n3−13=n3−(n−1)3+(n−1)3−(n−2)3……+23−13
n3−13=2∗(22+32+...+n2)+[12+22+...+(n−1)2]−(2+3+4+...+n)
n3−1=2∗(12+22+32+...+n2)−2+[12+22+...+(n−1)2+n2]−n2−(2+3+4+...+n)
n3−1=3∗(12+22+32+...+n2)−2−n2−(1+2+3+...+n)+1
n3−1=3(12+22+...+n2)−1−n2−n(n+1)/2
3(12+22+...+n2)=n3+n2+n(n+1)/2=(n/2)(2n2+2n+n+1)=(n/2)(n+1)(2n+1)
12+22+32+...+n2=n(n+1)(2n+1)/6
结论:
- ∑i=0n−1ai∗bn−1−i=(an−bn)/(a−b) (n∈N+)
- ∑i=0n−1(−1)i∗an−1−i∗bi=(an−bn)/(a+b) (2∣n)
- ∑i=0n−1(−1)i∗an−1−i∗bi=(an+bn)/(a+b) (n=2k+1,k∈N+)
- ∑i=1ni2=n∗(n+1)∗(2n+1)/6
1~3都由可以用快速幂从O(n)优化到O(log n).
4由O(n)优化成O(1).
推广:
如果1~3要求取模,那就用快速幂+乘法逆元。