LoginSignup
0
2

More than 5 years have passed since last update.

1から100までの足し算を視覚的に簡単にしてみる。

Last updated at Posted at 2019-01-04

1から100までの足し算を視覚的に簡単にしてみる。

かの偉大な数学者ガウスは1から100までの値をすべて足すという課題を

1+100=101
2+99=101

50+51=101
101 *50 = 5050

と計算し、101 *50 = 5050と一瞬で計算したそうです。すごいですね。

つまり51以上の数をreverseすることで列ごとの差分を打ち消し、計算を単純化させたということですね。
幼少期のガウスにグラフの概念があったのかどうか定かではありませんが、
グラフで見るとどういう感じで捉えることになるのか実験してみました。

Pythonで1-50,51-100までの数値のリストを作成

calc.py
import numpy as np
import matplotlib.pyplot as plt

# 1から100までの各要素を作成しreshapeで2行へ
nums = np.arange(1, 101, 1).reshape(2, -1)
# 50以下をlow,51以上をhighへ代入
low = nums[0:1].flatten()
#highはリバース
high = nums[1:2, ::-1].ravel()
fig, axe = plt.subplots(1, 2, constrained_layout=True, figsize=(12, 5), sharey=True)

axe[0].plot(low)
axe[0].set_title('low')
axe[1].plot(high)
axe[1].set_title('high')

Figure_1.png

ちょっとわかりにくいですが、斜辺の傾きが左右打ち消しあえそうなのがわかります。
ガウスがやったような計算方法で算出したグラフを足してみます。

各列の合計値のグラフを足してみる

calc.py

sum_len = []
for i, j in zip(low, high):
    sum_len.append(i + j)
plt.plot(sum_len, label="sum")
plt.legend()

Figure_1.png

highlowを足したsumが各列ごとに101になっているのが確認できます。そして棒グラフにしてみます。

棒グラフにしてみる

calc.py
x_axis=np.arange(1,51,1)
plt.bar(x_axis, high, bottom=low, label='higher')
plt.bar(x_axis, low, label='lower')
plt.legend()

Figure_1.png

最初からこれを作成すればわかりやすかったですね笑。
グラフにすることで数字の両端同士を足すとどの列も101になるのが直感的にわかるようになりました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2