有名な東大入試の問題の解き方を紹介します。
紙と鉛筆でも解けますが、プログラムを組んだ方がよりスムーズに解くことができます。
なぜなら正十二角形を使うからです。
正十二角形は手書きで書くと大変なのでプログラムで書いた方が楽です。
それでは早速、今回解いていく問題を確認しましょう。
図2:今回扱う問題
1.円周率って何?
そもそも円周率って何でしょうか?
率という数字が示すように「何か」と「何か」の割合のことです。
例えば「勝率」という言葉は「勝ち数」÷「試合数」で求められます。
10試合して3勝している場合勝率は3÷10で0.3になります。
円周率の場合は、「円周の長さ」÷「直径」で求められます。
ということで「円周の長さ」÷「直径」の式を活用すると良さそうです。
余弦定理を活用して解きます。
余弦定理が分からない場合はGoogleで「余弦定理 とは」と検索しましょう。
(分からない単語が出てきたら検索する癖をつけましょう)
参考:Pythonによるプログラム
出展:https://qiita.com/redmeteor777/items/4b4aebd9da8db825b10d
import math
# [π > 3.05 を証明せよ]
while True:
target_input = input("円周率がいくつより大きいことを証明しますか?")
try: #入力値チェック
target = float(target_input)
except ValueError:
print("数値を入力してください。")
else:
# 入力値が円周率より大きいと無限ループするため入力値をチェック
if target <= math.pi:
break
else:
print("円周率より小さい値を入力してください。")
print("円周率が{}より大きいことを証明する".format(target))
print("")
#正n角形の頂点の初期値を3にセット
n = 3
# breakするまでループさせる
while True:
# 等辺の長さ1、頂角360/nの二等辺三角形の底辺の長さを求める
kakudo = 360 / n
# math関数の三角関数計算ではラジアンを用いるので度→ラジアンの変換が必要
radian_kakudo = math.radians( kakudo )
# 余弦定理から、底辺 x の長さは[x ^ 2 = 1 ^ 2 + 1 ^ 2 + 2 * 1 * 1 * cos(360 / n)]
x = ( 1*1 + 1*1 - 2*1*1*math.cos( radian_kakudo ) ) ** 0.5
# 底辺の長さ * nを円周の近似値 y とする
y = x * n
print("正{0}角形のとき、辺の長さの合計は{1}".format(n , y))
if y / 2 > target: #目標値より大きくなったらブレイクして終了処理へ
break
# 頂点を1つ増やす
n = n + 1
print("")
print("円周率 = 円周 / 直径")
print("")
print("{0} / 2 = {1} > {2}".format(y , y / 2 , target))
print("")
print("よって円周率は{}より大きい".format(target))