/** 题目:C - Aladdin and the Flying Carpet 链接:https://vjudge.net/contest/154246#problem/C 题意:有多少种长方形满足面积为a,且最短边>=b;长方形边长为整数,且一定不可以是正方形。 思路:求出a的素因子以及每个素因子的个数,然后搜索所有满足条件的方法数。 其实可以求出所有<b的方法数,用总的减去它,可以更快,不过更麻烦。 */ #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e6+100; ll prime[maxn]; int z; vector<ll>v; int num[104]; int cous; ll a, b; void init() { memset(prime, 0, sizeof prime); for(int i = 2; i < maxn; i++){ if(prime[i]==0){ for(int j = i+i; j < maxn; j+=i){ prime[j] = 1; } } } z = 0; for(int i = 2; i < maxn; i++){ if(prime[i]==0){ prime[z++] = i; } } /// cout<<"prime number = "<<z<<endl; 78000ge } ll ans; void solve(int h,ll value) { if(h==0){ if(value>=b&&a/value>=b&&value*value!=a) ans++; return; } for(int i = 0; i <= num[h-1]; i++){ if(i>0){ value*=v[h-1]; } solve(h-1,value); } } int main() { init(); int T, cas=1; cin>>T; while(T--) { int cnt = 0; scanf("%lld%lld",&a,&b); v.clear(); ll n = a; cous = 0; memset(num, 0, sizeof num); for(int i = 0; i < z&&prime[i]*prime[i]<=n; i++){ if(n%prime[i]==0){ v.push_back(prime[i]); while(n%prime[i]==0){ n/=prime[i]; num[cous]++; } cous++; } } if(n>1){ v.push_back(n); num[cous++] = 1; } ans = 0; solve(cous,1); printf("Case %d: %lld ",cas++,ans/2); } return 0; }