思路:唯一分解定理
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
#define fo freopen("in.txt","r",stdin)
#define fc fclose(stdin)
#define fu0(i,n) for(i=0;i<n;i++)
#define fu1(i,n) for(i=1;i<=n;i++)
#define fd0(i,n) for(i=n-1;i>=0;i--)
#define fd1(i,n) for(i=n;i>0;i--)
#define mst(a,b) memset(a,b,sizeof(a))
#define sd(n) scanf("%d",&n)
#define sdd(n,m) scanf("%d %d",&n,&m)
#define ss(s) scanf("%s",s)
#define sddd(n,m,k) scanf("%d %d %d",&n,&m,&k)
#define pans() printf("%d\n",ans)
#define all(a) a.begin(),a.end()
#define sc(c) scanf("%c",&c)
#define we(a) while(scanf("%d",&a)!=EOF)
const int maxn=200005;
const double eps=1e-8;
ll prime[1000010],check[1000010];
int main()
{
memset(check,0,sizeof(check));
ll tot=0;
for(int i=2; i<1000010; i++)
{
if(!check[i])
{
prime[tot++]=i;
}
for(int j=0; j<tot; j++)
{
if(i*prime[j]>1000010)
{
break;
}
check[i*prime[j]]=1;
if(i%prime[j]==0)
break;
}
}
ll a,b,t;
cin>>t;
ll c=0;
while(t--)
{
scanf("%lld %lld",&a,&b);
if(sqrt(a)<b)
{
cout<<"Case "<<++c<<": ";
cout<<0<<endl;
continue;
}
else
{
ll cas=0;
for(int i=1;i<b;i++)
{
if(a%i==0)
cas++;
}
ll sum=1;
ll k=a;
for(int i=0;i<tot;i++)
{
if(prime[i]>a)
break;
ll num=0;
while(!(a%prime[i]))
{
a=a/prime[i];
num++;
}
if(num)
sum*=(num+1);
}
if(a>1)
sum*=(1+1);
cout<<"Case "<<++c<<": ";
cout<<sum/2-cas<<endl;
}
}
return 0;
}