这道题我开始是暴力求解,思路奇葩不再赘述。的确输出什么的都是对的。但是很遗憾,TLE了。
为了减少程序运行时间,自然是要优化一下。那么具体怎么优化呐。给个提示:减少枚举范围,从等差数列的求和公式入手
想了想。推导过程我还是放图吧
#include <iostream>
using namespace std;
int main()
{
int M, N;
while (cin >> N >> M && (N != 0 && M != 0))
{
int j;
for (int i = sqrt(2 * M); i > 0; i--)
{
j = M - (i + i * i)/2;
if (j%i == 0)
cout << "[" << (j/i + 1) << "," << (j/i + i) << "]\n";
}
cout << endl;
}
return 0;
}