Dream To Me

总有些什么留下来并被惦记

连续自然数和


连续自然数和


描述

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

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


输入格式

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


输出格式

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


想法

  我受够rqnoj的评测了。。最后一个点明明过了的,学过数列的话或者不学在初中就该知道了级数求和是首项加末项乘以项数处以二,根据这个来加个判断就搜就是的了。。。我看似乎有个讨论里某人回了这么一句话:这是数学题!你们居然硬搜........

  题仔细想想。。不是很难,咋我就绕了个大圈子呢?- -|| 

  某人回帖详见:http://www.rqnoj.cn/Discuss_Show.asp?DID=476  

Code:

#include <iostream>
using namespace std;
int main()
{
  int m,i,j;
  cin>>m;
  m*=2;
  int count=0;
  for(i=1;i<=m/2+1;i++)
    for(j=i+1;j<=m-i;j++)
      if((i+j)*(j-i+1)==m)
       cout<<i<<" "<<j<<endl;
  return 0;
}