洛谷P1147 连续自然数和

来源:互联网 发布:南京黑马程序员培训班 编辑:程序博客网 时间:2024/05/22 01:36

连续自然数和

题目描述

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

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

分析

可以把连续自然数段看成一个等差数列,设解的区间为[x,y]根据求和公式可知:M=(x+y)*(y-x+1)/2,所以枚举x,y,根据公式判断是否等于M。(如果此时的和大于M,那么就可以break掉)

代码

var
  i,j,n:longint;
  ans:real;
begin
  readln(n);
  for i:=1 to n-1 do
    begin
      for j:=i to n do
        begin
          ans:=(i+j)*(j-i+1)/2;
          if ans>=n then break;
        end;
      if ans=n then writeln(i,' ',j);
    end;
end.


0 0
原创粉丝点击