给定范围[m,n],求出里面所有不含完全平方数因子的数!
解析:首先筛出所有 2到n√ 的素数p,然后对每一个 P2 的倍数进行标记(代表删除),最后没有标记的就是我们需要的数。
def erase(m):
p = []
vis = set()
for i in range(2,m+1):
if i in vis:continue
p.append(i)
for j in range(i*i,m+1,i):
vis.add(j)
return p
def erase2(n,m):
vis = set()
p = erase(int(m**0.5)+1)
for each in p:
x = each**2
for j in range(x,m+1,x):
vis.add(j)
return [x for x in range(n,m+1) if x not in vis]