题目
题意:问有几种边长为整数的矩形面积等于a,且矩形的短边不小于b
思路:质因子分解求出a的因子对数.(e1+1)* (e2+1)* … *(e3+1).
在暴力求出1-b内的a的因子个数,相减一下就好了。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define m(a,b) memset(a,b,sizeof a)
#define en '\n'
using namespace std;
typedef long long ll;
const int N=1e6+5;
int is[N],prime[N],tot=0;
void getprime()
{
for(int i=2;i<=N-5;++i)
{
if(!is[i])
prime[++tot]=i;
for(int j=1;j<=tot;++j)
{
if(i*prime[j]>N-5) break;
is[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
ll div(ll x)
{
ll ans=1;
for(int i=1;i<=tot&&prime[i]*prime[i]<=x;++i)
{
int num=0;
while(x%prime[i]==0) ++num,x/=prime[i];
if(num) ans*=num+1;
}
if(x>1) ans*=2;
return ans;
}
int main()
{
getprime();
int T,cas=0;scanf("%d",&T);
while(T--)
{
ll a,b;scanf("%lld%lld",&a,&b);
if(b*b>a)
{
printf("Case %d: 0\n",++cas);
continue;
}
ll ans=div(a);
for(int i=1;i<b;++i)
if(a%i==0) ans-=2;
printf("Case %d: %lld\n",++cas,ans/2);
}
}