import numpy as np # 用 Sieve of Eratosthenes(埃拉託斯特尼篩法),打印【0,100】之間的全部質數。 def way1(): # 方法一,用prime數組,兩層for循環一個一個標記 arr = np.arange(2, 101) prime = np.ones(len(arr), dtype=bool) for i in range(2, len(arr)): # 被除數 for j in range(i - 1, len(arr)): # 下標 if arr[j] % i == 0: prime[j] = False return arr[prime] def way2(): # 方法二,用arr[arr % i != 0],整個數組一塊兒判斷,只對比當前被除數大的數據作取模計算,刪除非質數,最後鏈接上比當前數據小的質數。 arr = np.arange(2, 101) for i in range(2, 101): arr_tmp = arr[arr > i] tmp_start = len(arr) - len(arr_tmp) # 找到第一個大於i的數的下標 # you may don't tag, just delete in-prime ones. new_arr_tmp = arr_tmp[arr_tmp % i != 0] # print(type(new_arr_tmp)) # 看類型,是ndarray,因此不能用list的方法「+」直接相鏈接 arr = np.concatenate((arr[0:tmp_start], new_arr_tmp)) # 鏈接兩個ndarray方法 return arr if __name__ == '__main__': arr1 = way1() arr2 = way2() # 方法二比方法一巧妙得多,我想的! print(arr1, "len:", len(arr1)) print(arr2, "len:", len(arr2))