The sum problem
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 22411 Accepted Submission(s): 6604
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]// 此题给的是10亿 所以用 暴力肯定 超时 线性的都没用等差数列求和 a+d,a+2d,a+3d+...+a+nd; (a+d)+(n+1)*n*d/2<=m因为 d=1;n*n<2*m;n代表区间长度#include<stdio.h> #include<math.h> int main() { int i,n,m; while(scanf("%d %d",&n,&m)!=EOF) { if(n+m==0) break; for(i=sqrt(2*m);i>0; i--) { int j=m-(i*i+i)/2; if(j%i==0) printf("[%d,%d]\n",j/i+1,j/i+i); } printf("\n"); } return 0; }