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;
}