什么是埃拉托斯特尼筛法?是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于 的所有素数的倍数剔除,剩下的就是素数。(嗯,解释来自百度百科)
什么是素数?又称质数(prime number),质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
如果要取100以内的质数,按照埃拉托斯特尼筛法的意思,必须把不大于100开根号(即10)以内的所有质数的倍数剔除。
用Python实现,直接使用numpy库,代码如下:
# 埃拉托斯特尼筛法
a = np.arange(1,101)
n_max = int(np.sqrt(len(a)))
is_prime = np.ones(len(a),dtype=bool)#创建100个元素的数组,用来标记是否为质数
is_prime[0] = False
for i in range(2,n_max):
if i in a[is_prime]: #跳过非质数
is_prime[(i**2-1)::i] = False #减一是为了修复从0开始索引的问题
print(a[is_prime])