HDU 5750 Dertouzos(素数)

来源:互联网 发布:手机涂鸦软件 编辑:程序博客网 时间:2024/06/05 15:11

HDU 5750 Dertouzos

题意: 给你n,b两个数,让你求n以下的数,其数的最大因子(不算自身)是b,这样的数有多少个。

题解: 要使y = xd 的最大因子是d,那么x必须是y的最小质因子,那么x必须要小于等于d的最小质因子。再考虑x*d是要小于n的。先用素数筛预处理下,再用这两个条件判断即可。

#include <cstdio>#include <cstring>#include <iostream>#include <queue>#include <stack>using namespace std;const int N = 1e5+10;typedef long long LL;LL prime[N];LL id[N];int init(){    memset(prime,0,sizeof(prime));    int num = 0;    for(int i = 2; i < N; i++)    {        if(prime[i] == 0)            id[num++] = i;        for(int j = 0; j < num && id[j]*i < N; j++)        {            prime[id[j]*i] = 1;            if(i % id[j] == 0)                break;        }    }    return num;}int main(){    int num = init();    int T;    scanf("%d",&T);    while(T--)    {        LL n,d;        scanf("%lld%lld",&n,&d);        int ans = 0;        for(int j=0; j<num; j++)        {            if(id[j]*d >= n)                break;            ans++;            if(!(d%id[j]))                break;        }        printf("%d\n",ans);    }    return 0;}
0 0