Problem Description
Given a sequence 1,2,3,......N, your job isto calculate all the possible sub-sequences that the sum of the sub-sequence isM.
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 isM.The format is show in the sample below.print a blank line after each testcase.
Sample Input
20 10
50 30
0 0
Sample Output
[1,4]
[10,10]
[4,8]
[6,9]
[9,11]
[30,30]
Author
8600
Source
校庆杯Warm Up
Recommend
linle
分析:这是一道数学题,看了好久还是不会做,就上网看了别人的博客,找规律的题,a+1,a+2,a+3......a+len; 如果a+1+a+2+a+3.....+a+len=m(a+1+a+len)*len/2=m;len也就是数字的长度,a=0时,(len+1)*len/2=m;len取最大值就是;(a+1+a+len)*len/2=m,a*len+(len+1)*len/2=m,a=(m-(len+1)*len/2 )/len;a是大于0的数,,,真心的感觉数学好差,有种泪奔的感觉
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
__int64 n,m;
__int64 len,d;
while(cin>>n>>m)
{
if(m==0&&n==0)
break;
len=(int)sqrt(2.0*m);
for(int i=len;i>0;i--)
{
d=m-i*(i+1)/2;
if(d%i==0)
{
printf("[%I64d,%I64d]\n",d/i+1,d/i+i);
}
}
printf("\n");
}
return 0;
}