驗證尼科徹斯定理,即:任何一個整數的立方都可以寫成一串連續奇數的和。
*問題分析與算法設計
本題是一個定理,我們先來證明它是成立的。
對於任一正整數a,不論a是奇數還是偶數,整數(a×a-a+1)必然爲奇數。
a×a-a+1 = (a-1)xa + 1;奇數乘偶數必爲偶數,在加上1,就是奇數了。
構造一個等差數列,等差數列前n項和Sn = na1 + n(n-1)d/2
數列的首項爲(a×a-a+1),等差數列的差值爲2(奇數數列),則前a項的和爲:
a×((a×a-a+1))+2×a(a-1)/2
=a×a×a-a×a+a+a×a-a
=a×a×a
定理成立。證畢。
通過定理的證明過程可知L所要求的奇數數列的首項爲(a×a-a+1),長度爲a。編程的算法不需要特殊設計,可按照定理的證明過直接進行驗證。
#include <stdio.h>
int main()
{
int a, b, c, d;
printf("Please enter a number:");
scanf("%d", &a); /*輸入整數*/
b = a * a * a;
printf("%d * %d * %d = %d =", a, a, a, b);
for (d = 0, c = 0; c < a; c++) /*輸出數列,首項爲a*a-a+1,等差值爲2*/
{
d += a * a - a + 1 + c * 2; /*求數列的前a項的和*/
printf(c ? " + %d" : "%d", a * a - a + 1 + c * 2);
}
if (d == b)
{
printf(" Y\n"); /*若條件滿足則輸出“Y”*/
}
else
{
printf(" N\n"); /*否則輸出“N”*/
}
return 0;
}