折り紙を何回折ったら月まで届く?
先日、 「折り紙を何回折ったら月まで届くか」子供に聞かれました。(学校の宿題らしい)
月までは 384,400Km で、「1回折ったら2倍、2回折ったら4倍だから、、、」
2の階乗(回) 折った厚さが答えというところまで考えたのですが、結局は Google で調べました。
紙の厚さを 0.1mm としたとき 答えは、42回 だそうで、直感的には「そんなに少ないの??」という感じがしたので、実際に確かめました。
高さ: H 、折る回数: y、 紙の厚さ: X としたとき、高さを求める式は、
両辺をXで割って対数を取ると
折る回数を求める式は 以下となります。
Python で確かめると
import math
def origami(h: int, x: float) -> float:
# メートルをミリメートルに変換
h_mm = h * 100 * 10
# 折る回数 = log2高さmm - log2紙の厚さ
return math.log2(h_mm) - math.log2(x)
def check_answer(ori_count: float, x: float):
# 確かめ算(折り紙の高さ = 2**折る回数*紙の厚さ ) 単位:メートル
ori_height = 2**math.ceil(ori_count)*x / 10 / 100
print(f"計算した答え:折り紙を {ori_count:.2f} 回 折ると その高さまでいける")
print(f"確認した答え:折り紙を {math.ceil(ori_count)} 回 折ったら 高さは {ori_height:,.0f}メートル")
# 月: 3,844,000 km (384,400,000 m) 折り紙: 0.1 mm
h=384400000
x=0.1
ori_count = origami(h, x)
check_answer(ori_count, x)
実行結果は以下となり、やっぱり 42回となりました。
計算した答え:折り紙を 41.81 回 折ると その高さまでいける
確認した答え:折り紙を 42 回 折ったら 高さは 439,804,651メートル
以下のサイトを参考にさせてもらいました。ありがとうございました。