尼科梅彻斯(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;
}