在书上埃氏筛的章节看到一个问题:求 [n,m] 内无平方因子的数的个数,其中 p 是无平方因子的数,当且仅当不存在整数 k>1 满足 p 是 k2 的倍数。
书上给的解法是先筛出不超过 m 的质数 p,然后对于每个 p,筛掉 [n,m] 中 p2 的倍数。
首先用埃氏筛的话筛质数要花一个 O(mlogm),但是接下来的操作我想的是先用 O(m) 把所有质数存起来,然后遍历每一个质数 pi,筛掉 pi2 的倍数需要 pi2m 次运算,所以这两层循环的运算次数是 m⋅i=1∑numpi2m。
又因为有 i=1∑ni1=ln(n+1)+γ,且显然有 1≤pi2≤m,所以这个时间复杂度是 O(m×mlogm) 的,但是 1≤n≤m≤1012。
显然过不了,是我时间复杂度算错了还是算法想错了?求助。
附注:m−n≤107。