原题链接
https://www.luogu.com.cn/problem/P1147
这道题最简单的方法应该是用等差数列求和公式,一开始竟然没想到。
当做前缀和的练手题来写了。
#include <iostream>
using namespace std;
const int MAXN = 2000000;
long long a[MAXN+10];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= MAXN; i++)
{
a[i] = a[i-1] + i;//前缀和
}
for (int i = 1; i <= MAXN; i++)
{
for (int j = i + 1; j <= MAXN; j++)
{
int sum = a[j] - a[i - 1];
if (sum == n)
{
cout << i << " " << j << endl;
}
else if (sum > n)//这一步很重要,剪枝,不然会超时
{
break;
}
}
}
return 0;
}