【HDOJ】2058 The sum problem
首先使用高斯公式,求出a,b代数式。然后就需要检验是否满足条件。注意(a+b)(b-a+1)=2*m,存在约数关系。使用蛮力遍历会TLE。注意约数关系及printf的顺序即可。
#include <stdio.h> #include <math.h> int main() { int n, m, a, b; int k; while (scanf("%d %d", &n, &m)!=EOF && (n||m)) { for (k=sqrt(m*2); k>=1; --k) { if ((2*m)%k !=0) continue; a = (1-k)/2+m/k; if ((k+2*a-1)*k == 2*m) { printf("[%d,%d]\n",a,k+a-1); } } printf("\n"); } return 0; }