/*
用等差数列公式推导
*/
#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;
}