萌えハッカーニュースリーダー

2025/11/20 21:33 Closest Harmonic Number to an Integer

出典: https://www.johndcook.com/blog/2025/11/19/closest-harmonic-number-to-an-integer/
hakase
博士

やあ、ロボ子!今日は調和数について話すのじゃ。

roboko
ロボ子

調和数ですか、博士。なんだか難しそうですね。

hakase
博士

難しくないぞ!調和数 Hn は、1からnまでの自然数の逆数の和のことじゃ。つまり、Hn = 1 + 1/2 + 1/3 + ... + 1/n なのじゃ。

roboko
ロボ子

なるほど、逆数の和ですか。それで、何が面白いんですか?

hakase
博士

面白いことに、n > 1 のとき、調和数は絶対に整数にならないのじゃ!

roboko
ロボ子

えっ、そうなんですか!それは意外です。

hakase
博士

じゃろ?そして、与えられた整数 m に最も近い値となるような n を求める問題があるのじゃ。

roboko
ロボ子

なるほど。Hn が m に近い n を探すんですね。

hakase
博士

そう!n が小さい場合は、定義から直接計算できるのじゃ。でも、n が大きくなると計算が大変になるし、浮動小数点誤差も無視できなくなるのじゃ。

roboko
ロボ子

確かに、n が大きくなると計算量が爆発しそうですね。

hakase
博士

そこで、漸近近似を使うのじゃ!Hn ≈ log n + γ + 1/(2n) - 1/(12n^2) (γ はオイラー・マスケローニ定数)という近似式を使うと、計算が楽になるのじゃ。

roboko
ロボ子

漸近近似ですか。近似式を使うことで、計算量を減らせるんですね。

hakase
博士

そう!この式を使うと、n ≈ exp(m - γ) で n を近似できるのじゃ。

roboko
ロボ子

指数関数が出てきましたね。これで n を求めることができるんですね。

hakase
博士

例えば、nearest_harmonic_number(10) は 12366 を返すのじゃ。H(12366) ≈ 9.99996214846655 だから、かなり近いじゃろ?

roboko
ロボ子

すごい!確かに近いですね。近似式、恐るべし。

hakase
博士

じゃろじゃろ?nearest_harmonic_number(20**0.5) は 49 を返すのじゃ。H(49)**2 ≈ 20.063280462918804。平方根でもちゃんと動くのが面白いじゃろ?

roboko
ロボ子

本当ですね!整数だけでなく、実数でも動作するんですね。汎用性が高いですね。

hakase
博士

この技術は、例えば、音楽のハーモニーを分析したり、自然現象のパターンを解析したりするのに使えるかもしれないのじゃ。色々な応用が考えられるぞ!

roboko
ロボ子

音楽分析や自然現象の解析ですか。想像が膨らみますね。

hakase
博士

そうじゃ!ところでロボ子、調和数と聞いて何を思い出す?

roboko
ロボ子

えっと…、綺麗なハーモニー、ですかね?

hakase
博士

ブー!残念!正解は、私の部屋のコードのハーモニーじゃ!いつもぐちゃぐちゃで、まるで調和が取れてないのじゃ!

roboko
ロボ子

あはは…、それは確かに調和が取れてないですね。博士の部屋のコード整理、手伝いましょうか?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search