這題題目要找小於 1000 的自然數而且是 3 或是 5 的倍數的總和。

https://projecteuler.net/problem=1

用程式暴力解的話很簡單,把 1 到 1000 全部跑過一次並加總即可

這裡我使用的是 haskell

1
2
3
4
5
{-# OPTIONS_GHC -Wall #-}

main :: IO()
main = do
    print $ sum $ filter (\n -> ((n `mod` 3 == 0) || (n `mod` 5 == 0))) ([1..999] :: [Int])

不過其實也可以用手算,運用排容原理

  • <1000 自然數中 3 的倍數和 = 3 + 6 + 9 + … + 999 = (A)
  • <1000 自然數中 5 的倍數和 = 5 + 10 + 15 + … + 995 = (B)
  • <1000 自然數中 15 的倍數和 = 15 + 30 + 45 + 990 = (C)

(A) + (B) - (C) 就是答案了