数论题
纯暴力肯定不行,枚举区间长度即可!
因为 m = n * a + n * (n + 1) / 2;
可知 m < sqrt(2.0 * n);
从大区间开始枚举,求得 a 和 b 验证是否满足题意即可!
贴代码:(AC 31ms)
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
int a, n, b, m, l;
while(~scanf("%d%d", &n, &m) && n + m){
for(l = sqrt(2.0 * m); l > 0; l--){
a = (2 * m - l * l + l) / (2 * l);
b = a + l - 1;
if((a + b) * l == 2 * m)
printf("[%d,%d]\n",a,b);
}
puts("");
}
return 0;
}