📜  找出出现在素数位置的字符的ascii值之和(1)

📅  最后修改于: 2023-12-03 15:25:49.704000             🧑  作者: Mango

找出出现在素数位置的字符的ASCII值之和

本程序用于在给定字符串中找出出现在素数位置的字符的ASCII值之和。

输入

输入为一个字符串。

输出

输出为出现在素数位置的字符的ASCII值之和。

实现方法
  1. 首先,我们需要确定素数的位置。素数为大于1且只能被1和自身整除的数。我们可以通过遍历从2开始的自然数,每次判断是否为素数,如果是则将其位置记录下来。
  2. 然后,我们遍历给定字符串,找出素数位置上的字符的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)。