您的位置:首页 > 其它

连续整数和问题

2013-11-05 21:42 260 查看
问题描述:

大部分正整数可以表示2个以上连续整数之和。如:6=1+2+3,9=5+4=2+3+4;

实验任务:

连续整数和问题要求计算给定的正整数可以表示为多少个2以上连续整数之和。

解题过程:

一个数M若可以写成以a开头的连续n个自然数之和,则M=a+(a+1)+(a+2)+…+(a+n-1)=n*a+n*(n-1)/2,要求a>=1,否则就是以a+1开头的连续n-1个整数了,也就是要求(M-(n*(n-1)/2))除于n大于等于1,(M-(n*(n+1)/2))%n==0,这样就很容易判断一个数可不可以写成连续n个自然数的形式了,遍历n=2…sqrt(2*M+0.25)-0.5,还可以输出所有解。

#include<stdio.h>
#include<math.h>

int ans=0;
void find(int x)
{
int i,a;
for(i=2;i<=sqrt(x*2+0.25)-0.5;i++)
{
if((x-(i*(i-1))/2)%i==0)
{
ans++;
a=(x-(i*(i-1))/2)/i;
printf("%d=",x);
for(int j=0;j<i;j++)
{
if(j<i-1)
printf("%d+",a+j);
else
printf("%d\n",a+j);
}
}
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
ans=0;
find(n);
printf("total=%d\n",ans);
}
return 0;
}


View Code
通过编程实验发现,除了2^n以外,其余所有数都可以写成该形式。下面说明为什么。
若数M符合条件,则有M=a+(a+1)+(a+2)+…+(a+n-1)=(2*a+n-1)*n/2,而2*a+n-1与n肯定一个为奇数一个为偶数,即M一定要有一个奇数因子,而所有2^n都没有奇数因子,因此肯定不符合条件。

可以证明,只要M有一个奇数因子,就一定可以写成连续n个自然数之和。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: