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]
Author
8600
Source
C语言AC代码
#include<stdio.h>
#include<math.h>
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)&&n&&m)
{
int l=(int)sqrt(m*2.0);
int a1l=0;
for(;l>0;l--)
{
a1l=m-l*(l-1)/2;
if(a1l%l==0)
printf("[%d,%d]\n",a1l/l,a1l/l+l-1);
}
printf("\n");
}
return 0;
}
思路:
1.
Sn=na1+n(n-1)/2,
a1=1,
Sn=n(n+1)/2,
2*Sn=n(n+1),
Sn=M,
2M=n(n+1).
2.
l为项的个数,l<=sqrt(2M)
3.
a1n=Sn-n(n-1)/2,
if(a1n%n==0)
说明a1在这个序列当中