/*
用等差数列公式推导
*/
#include < iostream >
#include < cmath >
using namespace std;
int main()
{
int cas, cnt, number;
int sum, n;
int neck;
scanf( " %d " , & cas);
while (cas -- )
{
cnt = - 1 ;
scanf( " %d %d " , & number, & sum);
neck = ( int )sqrt(sum + 0.001 ) * 2 ;
for (n = 1 ; n <= neck; n ++ )
{
if ((sum * 2 ) % n == 0
&& sum * 2 / n + 1 - n > 0
&& (sum * 2 / n + 1 - n) % 2 == 0
)
cnt ++ ;
}
printf( " %d %d\n " , number, cnt);
}
return 0 ;
}
用等差数列公式推导
*/
#include < iostream >
#include < cmath >
using namespace std;
int main()
{
int cas, cnt, number;
int sum, n;
int neck;
scanf( " %d " , & cas);
while (cas -- )
{
cnt = - 1 ;
scanf( " %d %d " , & number, & sum);
neck = ( int )sqrt(sum + 0.001 ) * 2 ;
for (n = 1 ; n <= neck; n ++ )
{
if ((sum * 2 ) % n == 0
&& sum * 2 / n + 1 - n > 0
&& (sum * 2 / n + 1 - n) % 2 == 0
)
cnt ++ ;
}
printf( " %d %d\n " , number, cnt);
}
return 0 ;
}