推导一下等差数列的公式,m=a*n+(n-1)*n/2;如果n最大,那么这时a1=1,推导一下n*(n+1)=m*2,所以n最大为
sqrt(m*2);
接着n从大到小枚举(利用公式m=a*n+(n-1)*n/2;)求出满足条件的a,然后相应的区间就是[a,a+len-1];
#include<stdio.h>
#include<math.h>
int main()
{
int N,M,n,m;
while(scanf("%d%d",&N,&M),N||M)
{
n=(int)sqrt((double)(M)*2);
while(n)
{
m=M/n-(n-1)/2;//计算初值,即a;
if(m*n+(n*(n-1)/2)==M)
printf("[%d,%d]\n",m,m+n-1);
n--;
}
}
return 0;
}