#include <iostream>
#include <cmath>
using namespace std;
const int N=35005;
bool vis[N+1];
int phi[N+1],cnt;
void prim_num()
{
cnt=0;
int i,j,n;
for(i=0; i<=N; i++)
vis[i]=true;
n=(int)sqrt(1.0*N);
for(i=2; i<=n; i++)
for(j=i+i; j<=N; j+=i)
vis[j]=false;
for(i=2; i<=N; i++)
if(vis[i])
phi[cnt++]=i;
}
int main()
{
int t,n,i,d,res,num;
prim_num();
scanf("%d",&t);
while(t--&&scanf("%d%d",&n,&d)!=EOF)
{
if((n-d-1)/d<=0||(n-d-1)<=0)
{
printf("0\n");
continue;
}
res=0;
if((n-1)/d>=d)
{
for(i=0;i<cnt;i++)
{
res++;
if(d%phi[i]==0)
break;
}
}
else
{
num=(n-1)/d;
for(i=0;i<cnt&&phi[i]<=num;i++)
{
res++;
if(d%phi[i]==0)
break;
}
}
printf("%d\n",res);
}
return 0;
}
hdu 5750 数学+预处理
最新推荐文章于 2018-12-02 15:32:34 发布