Problem Description
Given a sequence 1,2,3,......N, your job is to calculate all the possible sub-sequences that the sum of the sub-sequence is M.
Input
Input contains multiple test cases. each case contains two integers N, M( 1 <= N, M <= 1000000000).input ends with N = M = 0.
Output
For each test case, print all the possible sub-sequence that its sum is M.The format is show in the sample below.print a blank line after each test case.
Sample Input
20 10
50 30
0 0
Sample Output
[1,4]
[10,10]
[4,8]
[6,9]
[9,11]
[30,30]
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=45000;
int n,f[50005],m,x,y;
int main()
{
for (int i=1;i<=maxn;i++) f[i]=i*(i+1)>>1;
while (~scanf("%d%d",&n,&m),n+m)
{
int u=lower_bound(f+1,f+maxn,m)-f;
for (int i=u;i;i--)
if (2*m%i==0)
{
x=i-1;
y=2*m/i;
if (((x+y)>>1)>n) break;
if ((x+y)%2==0)
{
printf("[%d,%d]\n",(y-x)>>1,(y+x)>>1);
}
}
printf("\n");
}
}