Последовательная простая сумма: решения на Python для HackerRank

Упомянутая вами проблема «последовательная простая сумма» — это популярная задача кодирования на таких платформах, как HackerRank. Цель состоит в том, чтобы найти количество способов, которыми данное положительное целое число может быть выражено в виде суммы последовательных простых чисел. Вот несколько способов решения этой проблемы, а также примеры кода:

Метод 1: грубая сила
Подход грубой силы включает в себя генерацию всех простых чисел до заданного положительного целого числа и проверку всех возможных последовательных простых сумм.

def generate_primes(n):
    primes = []
    for num in range(2, n + 1):
        for i in range(2, int(num  0.5) + 1):
            if num % i == 0:
                break
        else:
            primes.append(num)
    return primes
def consecutive_prime_sum(n):
    primes = generate_primes(n)
    count = 0
    for i in range(len(primes)):
        sum = 0
        for j in range(i, len(primes)):
            sum += primes[j]
            if sum == n:
                count += 1
            if sum > n:
                break
    return count
n = int(input("Enter a positive integer: "))
result = consecutive_prime_sum(n)
print("Number of ways to express", n, "as a sum of consecutive primes:", result)

Метод 2: скользящее окно
Подход со скользящим окном предполагает сохранение окна простых чисел, сумма которых равна заданному положительному целому числу. Окно перемещается по простым числам, при этом сумма корректируется соответствующим образом.

def generate_primes(n):
    primes = []
    for num in range(2, n + 1):
        for i in range(2, int(num  0.5) + 1):
            if num % i == 0:
                break
        else:
            primes.append(num)
    return primes
def consecutive_prime_sum(n):
    primes = generate_primes(n)
    count = 0
    window_sum = 0
    left = 0
    for right in range(len(primes)):
        window_sum += primes[right]
        while window_sum > n:
            window_sum -= primes[left]
            left += 1
        if window_sum == n:
            count += 1
    return count
n = int(input("Enter a positive integer: "))
result = consecutive_prime_sum(n)
print("Number of ways to express", n, "as a sum of consecutive primes:", result)

Метод 3. Динамическое программирование
Подход динамического программирования предполагает использование таблицы запоминания для хранения количества способов выразить заданный индекс в виде суммы последовательных простых чисел.

def generate_primes(n):
    primes = []
    for num in range(2, n + 1):
        for i in range(2, int(num  0.5) + 1):
            if num % i == 0:
                break
        else:
            primes.append(num)
    return primes
def consecutive_prime_sum(n):
    primes = generate_primes(n)
    memo = [0] * (n + 1)
    memo[0] = 1
    for prime in primes:
        for i in range(prime, n + 1):
            memo[i] += memo[i - prime]
    return memo[n]
n = int(input("Enter a positive integer: "))
result = consecutive_prime_sum(n)
print("Number of ways to express", n, "as a sum of consecutive primes:", result)

Это три разных подхода к решению проблемы «последовательной простой суммы». Каждый метод имеет свои компромиссы с точки зрения временной сложности и сложности реализации. Вы можете выбрать метод, который лучше всего соответствует вашим требованиям.