这道题需要用到一些数学推导,其实就是一个等差数列的求和公式。
#include <stdio.h>
#include <math.h>
int main()
{
int n,m,a,t;
int num1,num2;
int ctr1,ctr2;
while ( scanf( "%d",&n )!=EOF ) {
scanf( "%d",&m );
t=(int)sqrt(2*m);
for ( a=t;a>=1;a-- ) {
if ((2*m)%a==0 ) {
num1 = a;
num2 = (2*m)/a;
if ( (num1%2==0&&num2%2==1)||(num1%2==1&&num2%2==0) ) {
ctr1=(num2-num1+1)/2;
ctr2=(num1+num2-1)/2;
if ( ctr1<=n&&ctr2<=n )
printf( "[%d,%d]\n", ctr1,ctr2 );
}
}
}
}
return 0;
}