阶层分解(线性筛法)

题面:阶层分解
思路

该题很容易就想到要把[1, N]中每个数包含的质因子p的个数算出来。
但是如果每个数都分解过去再合并,时间复杂度为O(N*sqrt(N)),题目N最大为1e6,必然超时。
在1~N中,至少包含1个质因子p的个数有 ⌊N / p⌋ (向下取整)个,而至少包含2个质因子p的个数有 ⌊N / p ^ 2⌋ 个,依次类推,直到 1 ~ N 中取不到是p的倍数的数。
所以,N!中质因子p的总个数为:
在这里插入图片描述
这样,对于N中每一个质因子p,计算上式,时间复杂度为O(log N),而对于N!分解质因子的时间复杂度就是 O(N * log N)。

代码如下:
#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值