数学のブログ

“離散的”な世界 等差数列の和 2でも5でも割り切れない数の個数、総和、公倍数、共通部分、ド・モルガンの法則、補集合

新装版 数学読本3 (松坂 和夫(著)、岩波書店)の第13章(“離散的”な世界 - 数列)、13.1(数列とその和)、等差数列の和の問9の解答を求めてみる。

2で割り切れる数の個数。

1 2 n 1000 1 2 n 500 1 n 500

500個。

5で割り切れる数の個数。

1 5 n 1000 1 n 200

200個。

2でも5でも割り切れる、すなわち10で割り切れる数の個数。

1 10 n 1000 1 n 100

100個。

よって、2でも5でも割り切れない数の個数。

1000 - ( 500 + 200 - 100 ) = 400

2で割り切れる数の総和。

500 ( 2 + 1000 ) 2

5で割り切れる数の総和。

200 ( 5 + 1000 ) 2

2でも5でも割り切れる、すなわち10で割り切れる数の総和。

100 ( 10 + 1000 ) 2

1から1000までの自然数の総和。

1000 ( 1 + 1000 ) 2

よって、2でも5でも割り切れない数の総和は

1000 ( 1 + 1000 ) 2 - ( 500 ( 2 + 1000 ) 2 + 200 ( 5 + 1000 ) 2 - 100 ( 10 + 1000 ) 2 )
= 100 2 ( 10 ( 1 + 1000 ) - 5 ( 2 + 1000 ) - 2 ( 5 + 1000 ) + ( 10 + 1000 ) )
= 100 2 · 4 · 1000
= 200000

コード

#!/usr/bin/env python3
from unittest import TestCase, main

print('9.')

ns = [n for n in range(1, 1001) if n % 2 != 0 and n % 5 != 0]


class Test(TestCase):
    def test_len(self):
        self.assertEqual(len(ns), 400)

    def test_total(self):
        self.assertEqual(sum(ns), 200000)


if __name__ == "__main__":
    main()

入出力結果

% ./sample9.py -v
9.
test_len (__main__.Test) ... ok
test_total (__main__.Test) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
%