//因为二进制异或和减法当做0,1时为1(但减法需要借位!)(0,0)(1,0)(1,1)等价 所以a-b<=a^b a-b<=c
//c=gcd(a,b) a-b=(p-q)c 得到a-b>=c
//所以可以推出 满足gcd(a,b)=a^b=c 的必要条件为c=a-b;
//当c=a-b时 gcd(a,b)=gcd(kc,(k-1)c)=c
//枚举a c 得b=a-c判断 a^b是否等于c即可
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;
const int N=3e7;
ll ans[N+20];//table[n] 求1~n中有多少对 gcd(a,b) = a异或b
//若a^b=c 则 a^c=a^(a^b)=a^a^b=0^b=b
//因为二进制异或和减法当做0,1时为1(但减法需要借位!)(0,0)(1,0)(1,1)等价 所以a-b<=a^b a-b<=c
//c=gcd(a,b) a-b=(p-q)c 得到a-b>=c
//所以可以推出 c=a-b;
//当c=a-b时 gcd(a,b)=gcd(kc,(k-1)c)=c
//枚举a c 得b=a-c判断 a^b是否等于c即可
void fun()
{
memset(ans,0,sizeof(ans));
for(int c=1;c<=N/2;c++)//每个因数只枚举一遍,加快运算
{
for(int a=2*c;a<=N;a+=c)
{
int b=a-c;
//a=kc b=kc-c=(k-1)c
//gcd(a,b)=gcd(kc,(k-1)c)=c
if((a^b)==c)
{
ans[a]++;//此时ans[a]:对于每个a共有多少个c满足 即多少对a,b
}
}
}
for(int i=2;i<=N;i++)
ans[i]+=ans[i-1];
}
int main()
{
fun();
int t;
cin>>t;
for(int cas=1;cas<=t;cas++)
{
int n;
cin>>n;
printf("Case %d: %d\n",cas,ans[n]);
}
return 0;
}