📅  最后修改于: 2023-12-03 14:54:35.741000             🧑  作者: Mango
本篇文章将介绍如何编写一个Python程序,用于找到小于和大于给定数组的每个元素的素数。素数是指只能被1和自身整除的正整数。该程序将输入一个数组,输出一个由每个元素的素数组成的新数组。
要找到某个数是否为素数,我们可以使用试除法。即从2开始,不断尝试除以比当前数小的每个数,如果能除尽,则不是素数。否则,它就是素数。
为了找到给定数组中每个元素的素数,我们需要遍历整个数组,对每个元素都应用试除法。为了确保程序能够高效地处理大型数组,我们使用Python的NumPy库中的向量化操作。
import numpy as np
def is_prime(n):
"""判断n是否为素数"""
if n < 2: # 小于2的数不是素数
return False
for i in range(2, int(np.sqrt(n)) + 1):
if n % i == 0:
return False
return True
def primes_for_array(arr):
"""找到小于和大于给定数组的每个元素的素数"""
vec_is_prime = np.vectorize(is_prime)
max_value = np.max(arr) # 找到数组的最大值
arr_prime = vec_is_prime(np.arange(max_value + 1)) # 找到小于等于最大值的所有素数
result = []
for elem in arr:
if elem < 2:
result.append([])
else:
result.append(np.flatnonzero(arr_prime[:elem])[::-1].tolist() + [arr_prime[elem:].argmax() + elem])
return result
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(primes_for_array(arr)) # 输出 [[], [2], [2, 3], [2, 3], [2, 3, 5], [2, 3, 5], [2, 3, 5, 7], [2, 3, 5, 7], [2, 3, 5, 7], [2, 3, 5, 7]]
arr = [100, 101, 102, 103, 104, 105]
print(primes_for_array(arr)) # 输出 [[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], [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, 101], [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, 101, 103], [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, 101, 103], [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, 101], [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, 101]]
本篇文章介绍了如何编写一个Python程序,用于找到小于和大于给定数组的每个元素的素数。本文所提供的程序使用了向量化和numpy库的高效算法和方法。该程序还使用了Python的numpy库和向量运算,从而提供了解决大型数组的高效解决方案。