Chinaunix首页 | 论坛 | 博客
  • 博客访问: 230457
  • 博文数量: 65
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 655
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-31 13:33
文章分类

全部博文(65)

文章存档

2016年(1)

2010年(4)

2009年(4)

2008年(4)

2007年(40)

2006年(12)

我的朋友

分类: C/C++

2007-06-23 18:57:32

    这是一个数学问题,学过高中数学的应该都会。
    对于自然数数列:1,2……n,进行求和,使用求和公式1+2+……+n=n*(n+1)/2即可;
    对于自然数平方的数列:1^2,2^2……n^2,进行求和,使用求和公式:1^2+2^2+……+n^2=n*(n+1)*(2n+1)/6即可;
    对于自然数立方的数列:1^3,2^3……n^3,进行求和,使用求和公式:1^3+2^3+……+n^3=n*n*(n+1)*(n+1)/4即可;
    综上,我们很容易使用C语言写出如下的求和代码:
typedef unsigned long ulong;

//求自然数的数列之和
ulong natural_number_sequence_sum( ulong n)
{
    return (ulong)(n*(n+1)/2);
}

//求自然数平方的数列之和
ulong natural_number_sequence_square_sum( ulong n)
{
    return (ulong)(n*(n+1)*(2*n+1)/6);
}

//求自然数立方的数列之和
ulong natural_number_sequence_cube_sum( ulong n)
{
    return (ulong)(n*n*(n+1)*(n+1)/4);
}

    Oh,yeah~!这么简单:)
    别着急,请问:
    对于自然数的四次方的数列:1^4,2^4……n^4,进行求和,使用求和公式:1^4+2^4+……+n^4=?
    对于自然数的五次方的数列:1^5,2^5…n^5,进行求和,使用求和公式:1^5+2^5+……+n^5=?
    ……
    对于自然数的m(m∈N)次方的数列:1^m,2^m……n^m,进行求和,使用求和公式:1^m+2^m+……+n^m=?
    -_-""
    毛主席说过:只要了解了一个问题的历史和现状,就会找到解决问题的方法。看看以前我们怎么求那些平方和与立方和的,先看平方和求法:
求1^2 + 2^2 + …… + n^2 = ?

解:
(n+1)^3 = n^3 + 3n^2 + 3n + 1

所以
(n+1)^3 - n^3 = 3n^2 + 3n + 1
n^3 - (n-1)^3 = 3(n-1)^2 + 3(n-1) + 1
(n-1)^3 - (n-2)^3 = 3(n-2)^2 + 3(n-2) + 1
............
3^3 - 2^3 = 3*2^2 + 3*2 + 1
2^3 - 1^3 = 3*1^2 + 3*1 +1

把以上n个等式的两边分别相加得到
(n+1)^3-1^3 =
3×(1^2+2^2+3^2+...+n^2) + 3×(1+2+3+……+n) + n个1的和

(n+1)^3-1 = 3×(1^2+2^2+...+n^2) + 3×n×(n+1)/2 + n

所以
3(1^2+2^2+......+n^2)
= n^3 + 3n^2 + 3n - 3n(n+1)/2 - n
= n(n^2+3n+2) - 3n(n+1)/2
= n(n+1)(n+2)-3n(n+1)/2
= n(n+1)(2n+1)/2

最后
1^2+2^2+......+n^2 = n(n+1)(2n+1)/6.
立方和的求法与平方和求法类似,不再赘述。
    回头看看那个求m次方的问题,就会有这样一个思路:要求m次方之和,必须先求出m-1次方之和;
要求m-1次方之和,必须先求出m-2次方之和;……直到所有相关的(1、2或3)次方和都被求出。
    哈哈,原来这个问题可以用递归的方法解决。其实,递归也是一个方法。还有一个方法:直接求出一个二元函数,变元分别为m、n;然后将m、n值代入函数即可得解。
阅读(2981) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~