C++連続自然数和
2575 ワード
#include
using
namespace
std;
inline
unsigned nsum(unsigned s,unsigned e)
{
unsigned sum = 0;
unsigned n = (e - s + 1);
if
(!(n%2))
sum = n/2 * (s + e);
else
sum = (s + e)/2 * n;
return
sum;
}
unsigned
bsearch
(unsigned start,unsigned end,unsigned key)
{
unsigned mid = 0;
unsigned s = start;
unsigned v = 0;
while
(start < end)
{
mid = (start + end)/2;
v = nsum(s,mid);
if
(v == key)
return
mid;
else
if
(v > key)
end = mid - 1;
else
if
(v < key)
start = mid + 1;
}
mid = (start + end)/2;
v = nsum(s,mid);
return
v == key ? mid : -1;
}
int
main()
{
unsigned m;
unsigned s,e,sum;
scanf
(
"%d"
,&m);
for
(
int
i = 1; i <= m/2+1; i++)
{
unsigned end =
bsearch
(i,m/2+1,m);
if
(end != -1)
printf
(
"%d %d
"
,i,end);
}
return
0;
}