📌  相关文章
📜  找到小于和大于给定数组的每个元素的素数(1)

📅  最后修改于: 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库和向量运算,从而提供了解决大型数组的高效解决方案。