/*
HDOJ1017
看上去很简单的一道题,数据也不大。
直接简单粗暴就可以
不过果然的英语渣渣看题又出现了失误
blocks在题中的意思为:数据块
题意正解:
t组数据块,每组的数据量不固定,读入n和m判断到0 0为止
另外,读入数据的时候可以忽略掉空行的处理,直接读入整数即可!
*/
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <cstring>
#include <sstream>
using namespace std;
#define input freopen("input.txt","r",stdin);
#define output freopen("output.txt","w",stdout);
#define For1(i,a,b) for (i=a;i<b;i++)
#define For2(i,a,b) for (i=a;i<=b;i++)
#define Dec(i,a,b) for (i=a;i>b;i--)
#define Dec2(i,a,b) for (i=a;i>=b;i--)
#define Sca_d(x) scanf("%d",&x)
#define Sca_s(x) scanf("%s",x)
#define Sca_c(x) scanf("%c",&x)
#define Sca_f(x) scanf("%f",&x)
#define Sca_lf(x) scanf("%lf",&x)
#define Fill(x,a) memset(x,a,sizeof(x))
#define MAXN 0x7fffffff
int main()
{
//input;
int t,n,m,i,j;
cin>>t;
while(t--)
{
int Case=0;
//getchar();
while(cin>>n>>m)
{
int ans=0;
if (!n&&!m) break;
printf("Case %d: ",++Case);
For1(i,1,n)
For1(j,i+1,n)
if ((i*i+j*j+m)%(i*j)==0) ans++;
cout<<ans<<endl;
}
if (t) cout<<endl;//注意什么时候换行
}
return 0;
}