连续自然数和
题目大意
对一个给定的自然数,求出所有的连续的自然数段,是每个数段中的全部数之和为给定的自然数。
样例输入
10000
样例输出
18 142
297 328
388 412
1998 2002
数据范围
10 <= M <= 2,000,000
思路
直接模拟。
枚举每一个自然数段,看看和是不是n,是就输出。
就可以了。
代码
#include<cstdio>
#include<cstring>
using namespace std;
int n,temp;
int main()
{
//freopen("combo.in","r",stdin);
//freopen("combo.out","w",stdout);
scanf("%d",&n);//读入
for (register int i=1;i<=n/2;i++)//枚举自然数段的最左边
{
temp=0;
for (register int j=i;j<=n;j++)//枚举自然数段的最右边
{
temp+=j;
if (temp==n) printf("%d %d\n",i,j);//输出
else if (temp>n) break;
}
}
fclose(stdin);
fclose(stdout);
return 0;
}