/*
	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;
}