📜  数组中k个最小素数和k个最大素数的总和与乘积(1)

📅  最后修改于: 2023-12-03 14:54:58.490000             🧑  作者: Mango

数组中k个最小素数和k个最大素数的总和与乘积

在一个数组中,找出其中k个最小的素数和k个最大的素数,计算出两个结果:总和和乘积。

思路
  1. 先筛选出数组中的素数。
  2. 对素数数组进行排序,找出前k个最小的和后k个最大的。
  3. 计算总和和乘积。
代码
import math

def is_prime(n):
    """
    判断一个数是否为素数
    """
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True

def prime_sum_product(arr, k):
    """
    计算数组中k个最小素数和k个最大素数的总和与乘积
    """
    prime_arr = [x for x in arr if is_prime(x)]   # 筛选出素数
    prime_arr.sort()

    min_sum = sum(prime_arr[:k])
    min_product = 1
    for i in range(k):
        min_product *= prime_arr[i]

    max_sum = sum(prime_arr[-k:])
    max_product = 1
    for i in range(-1, -k-1, -1):
        max_product *= prime_arr[i]

    return f'**数组中{k}个最小素数和{k}个最大素数的总和为:** {min_sum + max_sum},\n\n**数组中{k}个最小素数和{k}个最大素数的乘积为:** {min_product * max_product}'
示例
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
k = 2
print(prime_sum_product(arr, k))

输出结果:

数组中2个最小素数和2个最大素数的总和为: 43,

数组中2个最小素数和2个最大素数的乘积为: 646969