http://acm.hdu.edu.cn/showproblem.php?pid=2058
穷举,但不能从老老实实从一开始一个一个的穷举,一定要利用好公式,否则会时间超出限制
i是开头,j是数字的个数。
(i+i+j-1)*j/2=m
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int N,M;
while(cin>>N>>M&&N||M)
{
int i,j;
for(j=(int)sqrt((double)(2*M));j>=1;j--){
i=(2*M/j+1-j)/2;;
if((2*i+j-1)*j/2==M)
cout<<'['<<i<<','<<i+j-1<<']'<<endl;
}
cout<<endl;
}
return 0;
}