📅  最后修改于: 2023-12-03 15:25:49.704000             🧑  作者: Mango
本程序用于在给定字符串中找出出现在素数位置的字符的ASCII值之和。
输入为一个字符串。
输出为出现在素数位置的字符的ASCII值之和。
def is_prime(n):
"""
判断一个数是否为素数
"""
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def prime_position_sum(s):
"""
找出出现在素数位置的字符的ASCII值之和
"""
prime_index = []
for i in range(len(s)):
if is_prime(i + 1):
prime_index.append(i)
s_sum = 0
for i in prime_index:
s_sum += ord(s[i])
return s_sum
s = "Hello, world!"
print(prime_position_sum(s)) # 输出 431
本程序时间复杂度为O(n^1.5),空间复杂度为O(n)。其中,n为字符串长度。因为判断一个数是否为素数的时间复杂度为O(sqrt(n)),所以遍历从2到n的自然数的时间复杂度为O(n^1.5)。同时,因为需要用一个数组来保存素数位置,所以空间复杂度也为O(n)。