题目链接
题意:
已知长方形面积a和最小边长b,求能组成多少种长方形(不能是正方形)
我们把a用唯一分解定理算出来一共有多少因子再减去b-1~1之间符合条件的数目
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+100;
int cnt;
bool vis[N];
ll prime[N];
void pri()
{
cnt=0;
vis[0]=vis[1]=1;
for(int i=2; i<=N; i++)
{
if(!vis[i])
{
prime[cnt++]=i;
}
for(int j=0; j<cnt; j++)
{
int x=prime[j];
if(x*i>N)break;
vis[i*x]=1;
}
}
}
ll chai(ll x)
{
ll ans=1;
ll co=0;
for(int i=0; i<cnt&&prime[i]<x; i++)
{
co=0;
while(x%prime[i]==0)
{
co++;
x/=prime[i];
}
ans*=(co+1);
}
if(x>1)
{
ans*=2;
}
return ans;
}
int main()
{
// ios_base::sync_with_stdio(false);
// cin.tie(0);
pri();
int t;
scanf("%d",&t);
for(int cas=1; cas<=t; cas++)
{
ll a,b;
ll ans;
scanf("%lld%lld",&a,&b);
//cnt=0;
if(b*b>=a)
{
ans=0;
}
else
{
ans=chai(a);
ans/=2;
//int co=0;
for(int i=b-1; i>=1; i--)
{
if(a%i==0)
ans--;
}
// cout<<k<<" "<<co<<" "<<endl;
//ans=k;
}
printf("Case %d: %lld\n",cas,ans);
}
return 0;
}