尼科梅彻斯(Nicomachus)定理的求证

定义:任何一个整数的立方都可以写成一串相邻奇数之和(因为如果不是一串相邻的奇数,这个组合可能会有多个),这就是著名的尼科梅彻斯定理。

如:

1(3) = 1

2(3) = 3 + 5

3(3) = 7 + 9 + 11

4(3) = 13 + 15 + 17 + 19

… …

要求:输入任意整数n,求n(3)是哪些相邻奇数和

算法分析:

从上面的式子,我们可以得出以下推论:

    1. 整数n的立方等于一个相邻的奇数列的和,这个奇数数列的项数等于整数n。设奇数数列项数为k,则有 k == n。

    2. 整数n的平方是这个奇数数列的中位数。设奇数数列中位数为m,则有 n(2) == m

    好了,有以上这两条,我们就可以试着求出数列的第一项为:n1 = m – (2 * (k/2))。知道第一项式值,又知道有多少项,还知道这些奇数是相邻的,就可以推出这个数列了。

 

C代码如下:

#include <stdio.h>

int main()
{
    int n, m, k, n1;
    scanf("%d", &n);
    k = n;                // 数列项数等于整数n
    m = n * n;         // 数列的中位数等于n平方

 

   int i;

   if (n % 2 == 0)    // 如果整数是偶数
   {
        n1 = (m - (2 * (k / 2))) + 1;    // 第一项的求值要加1
        for (i = 1; i <= k; i++)
        {
            printf("%d ", n1);
            n1 += 2;
        }
    }

    else                  // 如果整数是奇数
    {
        n1 = m - (2 * (k / 2)); 
        for (i = 1; i <= k; i++)
        {
            printf("%d ", n1);
            n1 += 2;
        }
    }

 

    return 0;

}

posted @ 2010-10-17 21:52  jeff_nie  阅读(929)  评论(0编辑  收藏  举报