Взламываем проект Эйлера №1: стильно находим числа, кратные 3 или 5!

Привет, уважаемые любители программирования! Сегодня мы собираемся погрузиться в захватывающий мир проекта Эйлера и решить задачу № 1: кратные 3 или 5. Эта задача требует от нас найти сумму всех кратных 3 или 5 ниже заданного числа. Давайте засучим рукава, возьмем наш любимый язык программирования (я буду использовать Python) и изучим различные подходы к решению этой головоломки!

Метод 1: перебор
Метод перебора — это самый простой подход, при котором мы перебираем каждое число ниже заданного предела и проверяем, делится ли оно на 3 или 5. Если да, мы добавляем его к текущему числу. сумма. Вот код:

def sum_multiples_brute_force(limit):
    result = 0
    for num in range(limit):
        if num % 3 == 0 or num % 5 == 0:
            result += num
    return result
# Example usage
limit = 1000
sum_of_multiples = sum_multiples_brute_force(limit)
print("Sum of multiples of 3 or 5 below", limit, ":", sum_of_multiples)

Метод 2: математическая формула
Мы можем оптимизировать наше решение, используя математическую формулу для вычисления суммы кратных. Используя формулу суммы арифметического ряда, мы можем избежать повторения каждого числа. Вот код:

def sum_multiples_formula(limit):
    limit -= 1
    sum_3 = (3 * (limit // 3) * ((limit // 3) + 1)) // 2
    sum_5 = (5 * (limit // 5) * ((limit // 5) + 1)) // 2
    sum_15 = (15 * (limit // 15) * ((limit // 15) + 1)) // 2
    return sum_3 + sum_5 - sum_15
# Example usage
limit = 1000
sum_of_multiples = sum_multiples_formula(limit)
print("Sum of multiples of 3 or 5 below", limit, ":", sum_of_multiples)

Метод 3: подход с использованием множеств
Еще один умный способ решить эту проблему — использование множеств. Мы можем генерировать наборы, кратные 3 и 5, а затем объединять их, чтобы найти сумму. Вот код:

def sum_multiples_sets(limit):
    multiples_3 = set(range(0, limit, 3))
    multiples_5 = set(range(0, limit, 5))
    multiples = multiples_3.union(multiples_5)
    return sum(multiples)
# Example usage
limit = 1000
sum_of_multiples = sum_multiples_sets(limit)
print("Sum of multiples of 3 or 5 below", limit, ":", sum_of_multiples)

Метод 4: понимание списка
Для тех, кто любит лаконичные и элегантные решения, на помощь приходит понимание списка! Мы можем использовать одну строку кода, чтобы создать список кратных и суммировать их. Вот код:

def sum_multiples_list_comprehension(limit):
    multiples = [num for num in range(limit) if num % 3 == 0 or num % 5 == 0]
    return sum(multiples)
# Example usage
limit = 1000
sum_of_multiples = sum_multiples_list_comprehension(limit)
print("Sum of multiples of 3 or 5 below", limit, ":", sum_of_multiples)

Поздравляем! Теперь вы узнали несколько способов решения задачи № 1 проекта Эйлера: кратность 3 или 5. Мы изучили грубую силу, математические формулы, операции над множествами и элегантность понимания списков. Не стесняйтесь экспериментировать с этими методами, оптимизировать их или исследовать дополнительные творческие подходы. Приятного вам программирования и продолжайте решать захватывающие задачи, такие как Project Euler!