阶乘质因数分解
思路
前置知识:线性筛 (质数判定的算法4)。
显然
因为
对于
对于
对于
对于
...
则
综上有以下步骤:
- 线性筛求
内的质数。 - 遍历
内的质数,找出质数 , 。- 对于质数
,求出在 中出现的次数。
- 对于质数
是小于等于 的质数个数,约等于
综上时间复杂度为
代码实现
int n;
long long v[N];
::std::vector<int> ps;
int main() {
scanf("%d", &n);
/* 线性筛 */
for(int i = 2; i <= n; i++)
{
if(!v[i])
v[i] = i, ps.push_back(i);
for(int j : ps)
if(v[i] < j || j > n / i) break;
else v[i * j] = j;
}
for(int i : ps)
{
ll p = i;
int c = 0;
while(p <= n)
{
c += n / p;
p *= i;
}
printf("%d %d\n", i, c);
}
return 0;
}
本文作者:kuailedetongnian
本文链接:https://www.cnblogs.com/kuailedetongnian/p/18521395
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步