问题描述
正整数x 称为
输入描述
输入包含多组数据, 第一行包含一个整数
第一行包含两个整数n 和
输出描述
对于每组数据, 输出一个整数.
Solution
我们反过来考虑,给定一个d ,它可以作为谁的
以下为最终结论……
根据题目中给出的定义,我们可以知道,如果一个数a∗d ,它的ppd 是d ,那么需要满足的条件就是
(如果a 不为质数,它就可以拆出个最小非
(类似的,我们可以知道如果
那么问题就是统计有多少质数a ,满足
对于d 较小时,采用第一种方式约束枚举次数,反之使用第二种方式
(然而
(自己简单估计,应该是1e5 上下的质数一多,我的程序就T 飞了)
#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);
}
}
本文介绍了一种统计特定正整数的最大正真因数的方法。针对给定的两个正整数n和d,该算法计算出小于n的所有整数中,其最大正真因数恰好等于d的数量。通过分析质数特性及因数分解技巧,实现高效的枚举过程。
493

被折叠的 条评论
为什么被折叠?



