問題概略
1000 未満の自然数で,3 か 5 の倍数であるものの和を求めよ。
for ループ
愚直に for ループをまわして条件をみたすものの和を計算します。
ans = 0 for i in range(1, 1000): if i % 3 == 0 or i % 5 == 0: ans += i print(ans)
内包表記
python らしく内包表記で書いてみました。条件をみたすものを抽出したリストを作ってその和を求めます。
lst = [i for i in range(1000) if i % 3 == 0 or i % 5 == 0] print(sum(lst))
関数を定義
1000 未満の 3 の倍数は 個あって,その和は次のようになります。
これを一般化します。1000 未満の の倍数は 個あって,その和は次のようになります。
求める和は です。
def f(n: int, mx: int) -> int: t = mx // n return n * t * (t + 1) // 2 def solve(n: int) -> int: return f(3, n) + f(5, n) - f(15, n) if __name__ == "__main__": nmx = 1000 print(solve(nmx - 1))