黄金数とpython

技術

https://hiraocafe.com/note/goldentriangle.htmlより引用

はじめに

先日、黄金数の勉強をしていたら面白いことを発見したので記事にしておきます

$d_3$が有理数となるmはいくつあるか?

\(d_{n+1}\)=\(\sqrt{1+md_{n}}\), \(d_{1}=1\)とするとき、
\(d_{2}\)=\(\sqrt{1+md_{1}}\) = \(\sqrt{1+m}\)
\(d_{3}\)=\(\sqrt{1+md_{2}}\) = \(\sqrt{1+m\sqrt{1+m}}\)となる

ここで\(d_{2}\)も有理数であることは\(d_{3}\)が有理数であるための必要条件なので、\(d_{2}\)は有理数だと仮定しておこう
このとき、\(\sqrt{1+m}=i\) (\(i\)は整数)とでき、\(d_{3}\)=\(\sqrt{1+(i^2-1)i}\)=\(\sqrt{i^3-i+1}\)となる
従って、\(i^3-i+1\)が、もし正の整数の平方の形で記述できれば、\(d_{3}\)は有理数であると言える
よってそのようなプログラムを組んだ

実行したプログラム

import math

#100,000,000番目まで調査
for i in range(1,100000000):

#d_3を定義
    j = i*i*i-i+1
    k=math.sqrt(j)

#kをint型に格納することで小数点以下を切り捨てる
    l = int(k)
    if (l*l == j):
        result = 'i='+str(i)+' : '+str(j)+'     d3は'+str(k)
        print (result)

実行結果

i=1 : 1     #d3は1.0

i=3 : 25     #d3は5.0

i=5 : 121     #d3は11.0

i=56 : 175561     #d3は419.0

100,000,000個実行しましたが4つしか見つかりませんでした

考察

\(d_{3}\)が有理数になるには\(l^3-l+1\)が平方数になればよいのでしたよって\(p^2 = l^3-l+1\)とし、この式を変形してみましょう\(p^2-1 = l^3-l\)\((p-1)(p+1) = (l-1)l(l+1)\)となり、左辺は1つ飛びの2数の積右辺は連続する3数の積となっていますすなわち、\(d_{3}\)が有理数になるための条件は1つ飛びの2数の積のうち、それが連続する3数の積に分解できるような数であることがわかります
例えば、先の結果で出た\(i= 3, 5\)では、右辺\(i^3-i\)はそれぞれ、24, 120 となり24 = 4 * 6 = 2 * 3 * 4120 = 10 * 12 = 4 * 5 * 6というように変形できます

参考にしたページ

https://catalog.lib.kyushu-u.ac.jp/opac_download_md/15758/KJ00005471244.pdf

佐藤亮太

取締役
フロントエンド、バックエンドのプログラムを得意とする

関連記事

カテゴリー

アーカイブ