先日、ふと目にとまったニュースです。
辺の長さが全て整数で、周の長さと面積が等しくなる直角三角形と二等辺三角形は一組しか無い(相似は除く)
ということを慶應義塾大学の大学院生が証明したそうです。
慶應義塾大学の大学院生が発見、世界でたった一組の三角形 | 大学ジャーナル
どういうこと(?)かというと、
辺の長さが3:4:5の有名な直角三角形は周の長さが12、面積が30です。
これと同じ周の長さ、面積になる二等辺三角形は存在するのか(存在しない)
ということですね。それがなんとたった一組しか無いことを証明したそうです。コンピュータでしらみつぶしに探すならまだしも、一体どうやって数学的に証明するのでしょう。
今回の研究では、数論幾何学における「p進Abel積分論」と「有理点の降下法」と呼ばれる手法を応用。三辺の長さの整数比が377:352:135の直角三角形と、三辺の長さの整数比が366:366:132の二等辺三角形は、比をそのまま長さとすれば、周の長さが864(=377+352+135=366+366+132)、面積が23760(135×352÷2=132×360[二等辺三角形の高さ]÷2)であり同じ値になることが分かった。
ちなみに確かにそうらしいか、コンピュータでしらみつぶしてみました。
三角形の面積求め方と三平方の定理だけ出てきます。
from PIL import Image, ImageDraw import matplotlib.pyplot as plt import numpy as np im = Image.new('RGB', (1000, 500), (200, 200, 200)) draw = ImageDraw.Draw(im) #斜辺の長さの上限 max = 500 #直角三角形か? def is_right_angled(i, j, k): if i**2 == j**2 + k**2: return True else: return False #辺が全て整数で、周の長さ、面積が等しくなる二等辺三角形が存在するか? def has_isosceles_triangle(length, area): for bottom in range(0, max): side = (length - bottom) / 2.0 if side.is_integer(): height = abs(side**2 - (bottom / 2.0)**2 )**0.5 if area == bottom * height / 2.0: print("\tisosceles_triangle: %d, %d, %d" % (side, side, bottom)) draw.polygon(((500, 100), (bottom + 500, 100), (bottom/2 + 500, height + 100)), fill=(0, 192, 0), outline=(255, 255, 255)) return True return False for i in range(0, max): for j in range(0, i): for k in range(0, j): if is_right_angled(i, j, k): length = i + j + k area = j * k / 2.0 if has_isosceles_triangle(length, area): print("\tWow! %d, %d, %d length=%d, area=%d" % (i, j, k, length, area)) draw.polygon(((100,100), (100,j + 100), (k + 100, 100)), fill=(0, 192, 192), outline=(255, 255, 255)) pl_img = np.array(im) ; plt.imshow( pl_img ) #else: #print("%d, %d, %d" % (i, j, k))
斜辺の長さが10000まで計算してみましたが、確かに377:352:135の直角三角形と366:366:132の二等辺三角形しか該当しません(この基本形の辺が整数倍の長さになる相似形は該当します)。
こんなことどうやって証明するのでしょうね。全く想像もつかないのがくやしいところです。