📅  最后修改于: 2023-12-03 14:54:58.490000             🧑  作者: Mango
在一个数组中,找出其中k个最小的素数和k个最大的素数,计算出两个结果:总和和乘积。
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