博客里前两天写过的题···以为自己不会写了,结果把prime 和p数组写错了···浪费了宝贵的睡觉时间···记录一下debug之路吧
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fin(a,n) for(int i=a;i<=n;i++)
const int maxn=1e6+7;
bool prime[maxn];
int p[maxn];
int num=0;
void Init()
{
memset(prime,0,sizeof(prime));
prime[1]=1;
fin(2,maxn)
{
if(!prime[i])
{
for(int j=i+i;j<=maxn;j+=i)
prime[j]=1;
}
}
fin(2,maxn)
{
if(!prime[i])
p[++num]=i;
}
}
int solve(ll x)
{ int ans=1;
for(int i=1;i<=num&&p[i]<=sqrt(x);i++)
{ if(x%p[i]==0)
{
int cnt=0;
while(x%p[i]==0)
{
cnt++;
x/=p[i];
}
ans*=(cnt+1);
}
}
if(x>1)ans*=2;
return ans;
}
int main()
{ Init();
int t;
scanf("%d",&t);
for(int cas=1;cas<=t;cas++)
{ // printf("p[%d]=%d\n",cas,p[cas]);
ll a,b,a1,b1;
scanf("%lld %lld",&a,&b);
if(b>=sqrt(a))
{
printf("Case %d: %d\n",cas,0);
continue;
}
a1=solve(a);
ll ans=a1/2;
for(int j=1;j<b;j++)
if(a%j==0)ans--;
printf("Case %d: %lld\n",cas,ans);
}
}