小喵有很多女朋友。有一天,小喵想给女朋友们发玫瑰花。由于一些不(ni)知(dong)道(de)的原因,小喵想按照以下规律给它的已排好序的N个女朋友们发玫瑰花:给第一个女朋友发一支玫瑰花,给第二个女朋友发两支,给第三个女朋友发三支…现在小喵想知道连续的几个女朋友手中的玫瑰花总和为M的所有可能,你能帮助小喵吗?
Input输入包含多组测试数据。每组测试数据包含两个整数N,M( 1 <= N, M <= 1000000000)。 输入以N=M=0结束。
Output对于每组例子,输出连续的几个女朋友手中的玫瑰花总和为M的所有可能,以起始女朋友编号从小到大排序。
Sample Input
20 10 50 30 0 0Sample Output
[1,4] [10,10] [4,8] [6,9] [9,11] [30,30]
首先,判断题目,如果为数学问题,观察能否对公式进行化简,用一个量便是各个量的关系,化简后进行循环。
#include<math.h>
#include<stdio.h>
#include<string.h>
int main()
{
int n,m,i,j;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0) break;
else
{
for(j=(int)sqrt(2.0*m);j>0;j--)
{
i=(2*m/j+1-j)/2;
if(((i+i+j-1)*j/2)==m) printf("[%d,%d]\n",i,i+j-1);
}
}
printf("\n");
}
return 0;
}