埃氏筛法生成质数序列

import matplotlib.pyplot as plt
import numpy as np

# np.arange()函数返回一个有终点和起点的固定步长的排列,如[1,2,3,4,5],起点是1,终点是100,默认步长为1
a = np.arange(1, 101)
# 埃拉托斯特尼筛法,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。
n_max = int(np.sqrt(len(a)))
is_prime = np.ones(len(a), dtype=bool)
is_prime[0] = False

for i in range(2, n_max):
    if i in a[is_prime]:
        is_prime[(i**2 - 1)::i] = False
        
print(a[is_prime])
[ 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97]

你可能感兴趣的:(埃氏筛法生成质数序列)