您的位置:首页 > 其它

连续自然数之和问题(多种解法)

2007-10-19 15:10 204 查看



/**//*


对一个给定的自然数M,求出所有的连续的自然数段(连续个数大于1),这些连续的自然数段中的全部数之和为M。


例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解。










输入格式 Input Format


包含一个整数的单独一行给出M的值(10 <= M <= 2,000,000)








输出格式 Output Format


每行两个自然数,给出一个满足条件的连续自然数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于给定的输入数据,保证至少有一个解。






*/


#include <stdio.h>




int main(void)




...{


long i,j,k,m ;




scanf("%ld",&m) ;


k = m/2+1 ;


for(i=1 ;i <=k ; i++)


for(j=i+1; j<=m ; j++)


if( (j-i+1)*(i+j)/2 >=m )




...{


if ( (j-i+1)*(i+j)/2 == m )




...{


printf("%ld %ld ",i,j);


}


break ;




}






system("pause");


return 0 ;


}






/**//////////////////////////////////////////////////




#include <stdio.h>




int main()




...{


register long i,n,t,f,g;


scanf("%ld",&n);


for(i=n;i>1;i--)




...{


if(((f=n<<1))%i==0 && ((t=f/i+1-i))%2==0 && (g=t>>1)>0)


printf("%ld %ld ",g,g+i-1);




}




return 0;


}

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