hdu 5750 数学+预处理

来源:互联网 发布:php抓取访客手机号码 编辑:程序博客网 时间:2024/06/08 02:34
#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;}

0 0