В январе 2020 года, который был примерно три года назад по моим подсчетам, я случайно увидел этот пост:
Я смутно думал, что это звучит как крутая идея, и что я должен сделать это и написать об этом в блогах. Я отбил в Проект Euler Раньше, и в качестве письма раскрылось около половины первых 100, хотя некоторые с помощью методов, которые мне было бы смущены, чтобы рекламировать в сообщении в блоге программирования.
Многое произошло с января, но я собираюсь попробовать 100 дней ведения блога Линдси в сочетании с этой задачей:
Я хочу сказать вам прямо сейчас, что мы абсолютно не переживаем первые 100 проблем проекта Euler в ближайшие 100 дней, но я хочу начать немного с каждым днем и, надеюсь, в конечном итоге закончить их. Я не планирую публиковать каждый день, а придерживаться меня.
Теперь я также хочу сказать, в виде предисловия: это головоломки, которые забавно попробовать себя! Здесь будут спойлеры, читайте на вашем собственном риске!
Кроме того, Project Euler довольно математика- y. Если это не твоя вещь, это круто! Есть много программ, которые не попадают в математику. И я постараюсь привлечь соответствующие концепции программирования и информатики, когда смогу, потому что я не все о математике Либо TBH
Хорошо, без лишних слов, Проблема один Анкет
Найдите сумму всех кратных 3 или 5 ниже 1000.
Это звучит похоже на классический Fizzbuzz Interview Вопрос и может быть решено аналогичным образом.
Ключевая идея здесь заключается в том, что нам нужен способ быстро проверить, делится ли число на другой номер. Мы могли бы сделать что-то вроде разделения чисел и проверки фигур после десятичного десятичного, но это кажется тяжелым и может быть раздражающим, чтобы гарантировать, что цифры рассматриваются как десятичные знаки, а не как автоматически окружающие целые числа.
Магия здесь оператор модуля . Возможно, это не было рассмотрено в ваших классах математики, если они не освещают дискретную математику или информатику, но идея довольно проста, она возвращает Остаток, когда первое число разделено на второе Анкет
Вот несколько примеров:
10 % 5 == 0 23 % 5 == 3 4 % 5 == 4
Если это все еще неясно, попробуйте с еще несколькими значениями в вашей реплике или на Repl.it Анкет
Модульная арифметика появляется во многих приложениях IRL, как минуты за часом.
Таким образом, мы видим, что числа, которые делятся на второе число, возвращают ноль с оператором модуля.
Для цифр, которые делятся на пять:
i % 5 == 0
И для чисел, которые делятся на три:
i % 3 == 0
Теперь, когда у нас есть простой способ идентифицировать эти цифры, мы можем перевернуть и добавить каждого из них к общему уровню. Я написал функцию, которая суммировала бы все 3 и 5 кратных в рамках n , но есть много альтернативных способов приблизиться к нему.
Вот мой завершенный код, также доступный на GitHub Анкет
def sumOf3or5MultiplesUnder(n): total = 0 for i in range (0, n): if i % 3 == 0 or i % 5 == 0: total = total + i return total print(sumOf3or5MultiplesUnder(1000))
Вот и все для проблемы! Дайте мне знать, что вы думаете или если вы использовали другой подход.
Оригинал: “https://dev.to/valeriecodes/modular-arithmetic-project-euler-problem-one-4378”