求助数论
  • 板块学术版
  • 楼主BalanceSegment
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/6/30 14:47
  • 上次更新2023/11/3 12:04:27
查看原帖
求助数论
664105
BalanceSegment楼主2023/6/30 14:47

在书上埃氏筛的章节看到一个问题:求 [n,m][n,m] 内无平方因子的数的个数,其中 pp 是无平方因子的数,当且仅当不存在整数 k>1k>1 满足 pp 是 k2k^2 的倍数。

书上给的解法是先筛出不超过 m\sqrt m 的质数 pp,然后对于每个 pp,筛掉 [n,m][n,m] 中 p2p^2 的倍数。

首先用埃氏筛的话筛质数要花一个 O(mlog⁡m)O(\sqrt m\log\sqrt m),但是接下来的操作我想的是先用 O(m)O(\sqrt m) 把所有质数存起来,然后遍历每一个质数 pip_i,筛掉 pi2p_i^2 的倍数需要 mpi2\dfrac{m}{p_i^2} 次运算,所以这两层循环的运算次数是 m⋅∑i=1nummpi2\sqrt m \cdot \sum\limits_{i=1}^{num}\dfrac{m}{p_i^2}。

又因为有 ∑i=1n1i=ln⁡(n+1)+γ\sum\limits_{i=1}^n\dfrac{1}{i}=\ln(n+1)+\gamma,且显然有 1≤pi2≤m1\le p_i^2 \le m,所以这个时间复杂度是 O(m×mlog⁡m)O(\sqrt m\times m\log m) 的,但是 1≤n≤m≤10121\le n\le m\le 10^{12}。

显然过不了,是我时间复杂度算错了还是算法想错了?求助。

附注:m−n≤107m-n\le 10^7。

2023/6/30 14:47
加载中...