问题描述
正整数
x
称为
输入描述
输入包含多组数据, 第一行包含一个整数
第一行包含两个整数
n
和
输出描述
对于每组数据, 输出一个整数.
Solution
我们反过来考虑,给定一个
d
,它可以作为谁的
以下为最终结论……
根据题目中给出的定义,我们可以知道,如果一个数
a∗d
,它的
ppd
是
d
,那么需要满足的条件就是
(如果
a
不为质数,它就可以拆出个最小非
(类似的,我们可以知道如果
那么问题就是统计有多少质数
a
,满足
对于
d
较小时,采用第一种方式约束枚举次数,反之使用第二种方式
(然而
(自己简单估计,应该是
1e5
上下的质数一多,我的程序就
T
<script id="MathJax-Element-19509" type="math/tex">T</script>飞了)
#include<stdio.h>
#define lim 100007
bool b[lim+1];
int p[lim],n,d,T,tot;
int main()
{
for (int i=2;i<=lim;i++) if (!b[i]) for (int j=i<<1;j<=lim;j+=i) b[j]=1;
for (int i=2;i<=lim;i++) if (!b[i]) p[tot++]=i;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&d);
int i;
for (i=0;i<tot && d*p[i]<n;i++) if (d % p[i]==0)
{
i++;
break;
}
printf("%d\n",i);
}
}