枚举区间可能的长度len,将m减去1~len构成的序列和后如果结果是len的倍数,则可以构成答案区间。
#include<stdio.h> #include<math.h> int main(){ int n,m,len,b; while(scanf("%d%d",&n,&m)!=EOF&&(n||m)){ for(len=sqrt(m*2);len;len--){ b=m-(len*len+len)/2; if(b%len==0) printf("[%d,%d]\n",(b/len)+1,(b/len)+len); } putchar('\n'); } return 0; }