#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,m,i,j;
while(cin>>n>>m&&n!=0&&m!=0)
{
for(j=(int)sqrt(double(2*m));j>=1;j--)//求和公式(i为初始值,j为数列中数字个数:m=(i+i+j-1)*j/2-->j<sqrt(2*m)
{
i=(2*m/j+1-j)/2;
if(m==(2*i+j-1)*j/2)//前后两个算式虽然是等价推导的,但是因为int类型会省去前面一个算式的小数部分,m前后值并不同
cout<<'['<<i<<','<<i+j-1<<']'<<endl;
}
cout<<endl;
}
return 0;
}
杭电ACM2058C++
最新推荐文章于 2022-04-17 10:40:42 发布