#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n,m,b,a,k;
while(cin>>n>>m,n||m)
{
b=sqrt(2.0*m);
for(k=b;k>0;k--)
{
a=m/k-(k-1)/2;
if((2*a-1+k)*k==2*m)
cout<<"["<<a<<","<<a+k-1<<"]"<<endl;
}
cout<<endl;
}
return 0;
}
很简单的穷举法,初始项为i,个数为j,则(i+i+j-1)*(j)/2=m ==>(2*i-1+j)*j=2*m,所以j必然小于sqrt(2*m)。然后遍历枚举就可以了。