【c语言训练】尼科切斯定理的验证

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。

例如:

1^3=1段

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。

数据范围:1\le m\le 100\1≤m≤100 

尼科彻斯定理可以叙述为:任何一个整数的立方都可以表示成一串连续的奇数的和。 需要注意的是,这些奇数一定是连续的,如:1,3,5,7,9,…。 例如,对于整数5,5*5*5=125=21+23+25+27+29。 对于整数6,216=31+33+35+37+39+41。

这个题根据我大量的分析找规律发现第一个数跟他的立方数有一定关系。

用数学方法证明尼科梅彻斯定理。

证明之前,我们先看连续p个奇数的和有什么特点:

(1)假设p为偶数,这些连续p个奇数中间两项的数为2k-1,2k+1 ,则这组数的平均数定是2k,总和为2k*p , 如果p^2=2k,那么和为p^3

(2)假设p为奇数,这些连续p个奇数中间一项的数为2k+1 ,则这组数的平均数定是2k+1,总和为(2k+1)*p, 如果p^2=2k+1,那么和为p^3

我们再看 ,n^3 等于 n*n^2 ,即 n个n^2的和。

(1)假设n为偶数,把n^2定为一串连续奇数的中间两项的平均数,写出这中间两项,分别为n^2-1 ,和n^2+1 ,如果向这两个奇数的两边分别排(n-2)/2项连续的奇数,则加上中间那两项,这组奇数总共(n-2)/2*2+2=n项,这组连续奇数的总和为n*n^2=n^3,得证(可参照上面的偶数项连续奇数的特点)

比如4^3=13+15+17+19

4^3可以看成4*4^2=4*16,把16定成一串奇数的中间两项数的平均数,则中间两项分别是15,17 ,然后只需向这两个数的两旁排上剩余(4-2=2)项连续的奇数13和19即可。

(2)假设n为奇数,则n^2必是奇数,把n^2定为一串连续奇数的中间一项奇数,如果向这个奇数的两边分别排(n-1)/2项连续的奇数,则加上中间那两项,这组奇数总共(n-1)/2*2+1=n项,这组连续奇数的总和为n*n^2=n^3,得证(可参照上面的奇数项连续奇数的特点)

比如5^3=21+23+25+27+29

5^3可以看成5*5^2=5*25,把25定成一串奇数的中间一项奇数,然后只需向这个数的两旁排上剩余(5-1=4)项连续的奇数21,23,和27,29即可。

到此尼科梅彻斯定理得证。

所以用代码段求出第一个整数进行循环即可求出代码

#include<stdio.h>
int main() {
    int a, b, i;
    while (scanf("%d", &a) != EOF) {
        b = a*a-a+1; //算出第一位奇数
        for (i = 0; i < a; i++) {
            printf("%d", b);
            b += 2;
            if (i < a - 1) printf("+");//通过用限制,使得后面没有+
        }

    }


    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_73228832/article/details/128559916