这道题如果用枚举法肯定会超时,所以用等差数列求和公式才行。
如下图:
注意函数sqrt( ) 的参数只能是float ,double,long double型的,所以在里面要要把2*m 强制转换成double 型的。
如下图:
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n,m,a,t;
while(scanf("%d%d",&n,&m),n||m){
for(t=(int)sqrt((double)2*m);t>=1;t--){
a=m/t-(t-1)/2;
if(t*(2*a+t-1)==2*m)
printf("[%d,%d]\n",a,a+t-1);
}
printf("\n");
}
return 0;
}