您的位置:首页 > 其它

对于任意正整数都可以找出至少一串连续奇数,它们的和等于该整数的立方,验证2-20是否满足。

2016-10-18 21:21 501 查看
先举一些栗子吧:

1^3=1

2^3=3+5=8

3^3=7+9+11=27

4^3=13+15+17+19=64

5^3=21+23+25+27+29=125

先由上面这些栗子可以看出一些简单的规律,

1、连续的整数找出的这些一连串的奇数也是连续的,

2、每个整数对应的奇数列的数字个数等于这个数的数值,

3、每个奇数列的首项和末项与对应的整数有对应的表达式,如21=5*5-5+1,29=5*5+5-1

4、奇数数列的中间项或中间两项平均值就是对应整数n的平方,以这个平方数向两边延伸n个奇数项,这些项的和就是n平方值乘n。

不过定理说至少有一个连续奇数列,也许有的数不止一个奇数列,但是我想不出来了,能写出一个算法来证明有一个那就可以了吧。






根据上面总结的规律写出了下面这个程序:

#include<stdio.h>

#define N 30

void prove(int n)

{
int m=n*n*n,x=n*n-n+1;
int i,s=0,a
,j,count=0;
//printf("%d  %d  %d\n",m,x,s);
for(i=x,j=0;s!=m;i+=2,j++)
{

//printf("%d  %d  %d\n",i,j,s);
if(s>m)
{
printf("This theorem is wrong.\n");
break;
}
else
{
a[j]=i;
count++;
}
s+=i;
}
printf("%d^3=\t",n);
for(i=0;i<count;i++)
{
if(i==count-1)
printf("%-5d",a[i]);
else
printf("%-5d+",a[i]);
if((i+1)%10==0&&i!=count-1)
printf("\n\t");
}
printf("\n");

}

int main()

{
int i=2;
for(i=2;i<=20;i++)
prove(i);
return 0;

}

在函数prove()里面用s=n^3作为循环结束的标志,在循环内部也设置了如果s>n^3就跳出循环并输出错误信息的语句,也就是说如果没有输出错误信息,最后记录在数组里的数都是满足要求的连续奇数列。最后输出按照满10个数字换行进行排版,勉强看得过去。





具体看图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐