1^b+2^b+3^b+...+n^b数列

首先,这是我自己推出来的,O(n^2),常数巨大。所以无能为力优化!所以求此数列的公式!求优化!!!

主要思想:要算b次的,那么就要先算b+1次的。

首先,我用F(i, j)表示杨辉三角第i层第j个,即(a+b)^(i-1),i>1的展开各项系数

第1层:1

第2层:1 1          ((a+b)^1)

第3层:1 2 1       ((a+b)^2)

第4层:1 3 3 1    ((a+b)^3)

....

upd:原来自己2写的都是什么东西,后期想改成latex也不改了,就这样了。现在我来推:

用高一次的推低次的:

$$要求:\sum_{i=1}^{n} i^b$$

$$那么根据:\sum_{i=1}^{n} i^{b+1} + (n+1)^{b+1} = \sum_{i=1}^{n+1} i^{b+1} = \sum_{i=0}^{n} (i+1)^{b+1}$$

然后展开右式后发现能高此项的能约掉,所以就能得到低次项的。

那么,(n+1)^b展开就是

$$F(b+1,1) \times n^b + F(b+1,2) \times n^(b-1) + ... + F(b+1,b) \times n^1 + F(b+1,b+1) \times n^0$$

那么

$$(1+1)^b + (2+1)^b + (3+1)^b + ... + (n+1)^b =$$

$$(F(b+1,1) \times 1^b + F(b+1,1) \times 2^b + F(b+1,1) \times 3^b + ... + F(b+1,1) \times n^b) +$$

$$(F(b+1,2) \times 1^(b-1) + F(b+1,2) \times 2^(b-1)  + F(b+1,2) \times 3^(b-1)  + ... + F(b+1,2) \times n^(b-1) ) +$$

...

$$(F(b+1,b) \times 1^1 + F(b+1,b) \times 2^1 + F(b+1,b) \times 3^1 + ... + F(b+1,b) \times n^1) +$$

$$(F(b+1,b+1) \times 1^0 + F(b+1,b+1) \times 2^0 + F(b+1,b+1) \times 3^0 + ... + F(b+1,b+1) \times n^0) = $$

$$F(b+1,1) \times (1^b+2^b+...+n^b) + F(b+1,2) \times (1^(b-1)+2^(b-1)+...+n^(b-1)) + ... + F(b+1,b) \times (1^1+2^1+...+n^1) + F(b+1,b+1) \times (1^0+2^0+...+n^0) $$

因为F(b+1,1)=F(b+1,b+1)=1

所以 化简得到

$$(1+1)^b + (2+1)^b + (3+1)^b + ... + (n+1)^b =

(1^b+2^b+...+n^b) + F(b+1,2) \times (1^(b-1)+2^(b-1)+...+n^(b-1)) + ... + F(b+1,b) \times (1^1+2^1+...+n^1) + n$$

好了,我们发现了1^(b-1)+2^(b-1)+...+n^(b-1)出现了,那么就可以算了。将(1^b+2^b+...+n^b) 移左式,得

(n+1)^b - 1 - n = F(b+1,2) \times (1^(b-1)+2^(b-1)+...+n^(b-1)) + ... + F(b+1,b) \times (1^1+2^1+...+n^1)

好了,继续化简,得

1^(b-1)+2^(b-1)+...+n^(b-1) = ((n+1)^b - (n+1) - F(b+1,3) \times (1^(b-2)+2^(b-2)+...+n^(b-2)) - ... - F(b+1,b) \times (1+2+...+n)) / F(b+1,2)

因为F(b+1,2) = b,所以,最终得

1^(b-1)+2^(b-1)+...+n^(b-1) = ((n+1)^b - (n+1) - F(b+1,3) \times (1^(b-2)+2^(b-2)+...+n^(b-2)) - ... - F(b+1,b) \times (1+2+...+n)) / b

我们令 x = b-1,那么b = x+1,得

1^x+2^x+...+n^x = ((n+1)^(x+1) - (n+1) - F(x+2,3) \times (1^(x-1)+2^(x-1)+...+n^(x-1)) - ... - F(x+2,x+1) \times (1+2+...+n)) / (x+1)

好了,我们现在用S(x)表示1^x+2^x+...+n^x

得到公式:

S(1) = 1^1+2^1+...+n^1 = n(n+1) / 2

S(x) = ((n+1)^(x+1) - (n+1) - F(x+2,3) \times S(x-1) - F(x+2,4) \times S(x-2) - ... - F(x+2,x+1) \times S(1)) / (x+1)

(不证明了,自己用归纳证一下)

(另,求优化!有没有O(1)算法,那个(n+1)^(x+1)会耗很多时间= =)

好了。我们将x=2带进去得到1^2+2^2+...+n^2

得到

S(2) = ((n+1)^3- (n+1) - F(4,3) \times S(1)) / 3 = ((n+1)^3- (n+1) - 3 \times (n(n+1) / 2)) / 3 = (n^3 + 3 \times n^2 + 2 \times n - 3 \times n(n+1)/2) / 3 = n \times (2 \times n^2+3n+1) / 6 =n \times (n+1) \times (2 \times n+1) / 6

所以

S(2) = n \times (n+1) \times (2 \times n+1) / 6

即 1^2+2^2+...+n^2 = n \times (n+1) \times (2 \times n+1) / 6

(求大神们指点)

上一篇:201521123002《Java程序设计》第7周学习总结


下一篇:023 Spark Scheduler(调度)