「ハッピー数」の版間の差分
→ハッピー数: リンクを追加 タグ: モバイル編集 モバイルアプリ編集 Androidアプリ編集 |
|||
58行目: | 58行目: | ||
==コンピュータプログラムの例== |
==コンピュータプログラムの例== |
||
ある数がハッピー数であるかどうかを調べるには、コンピュータを使うのが便利である。[[Python]]を使ったプログラムの例は次の通り<ref>[http://rosettacode.org/wiki/Happy_Number Happy Number] Rosetta Code</ref>。 |
ある数がハッピー数であるかどうかを調べるには、コンピュータを使うのが便利である。[[Python]]を使ったプログラムの例は次の通り<ref>[http://rosettacode.org/wiki/Happy_Number Happy Number] Rosetta Code</ref>。 |
||
< |
<syntaxhighlight lang=python> |
||
SQUARE = dict([(c, int(c) ** 2) for c in "0123456789"]) |
SQUARE = dict([(c, int(c) ** 2) for c in "0123456789"]) |
||
def is_happy(n): |
def is_happy(n): |
||
66行目: | 66行目: | ||
n = sum(SQUARE[d] for d in str(n)) |
n = sum(SQUARE[d] for d in str(n)) |
||
return n == 1 |
return n == 1 |
||
</syntaxhighlight> |
|||
</source> |
|||
== 数学以外での登場 == |
== 数学以外での登場 == |
2020年7月5日 (日) 23:05時点における版
ハッピー数(ハッピーすう、happy number)とは、自然数の各桁を1桁に分解して二乗和を取り、新しくできた数についても同じ処理を繰り返し行って、最終的に1となる数を指す。
例えば19に上の規則を適用すると、
- 12 + 92 = 82
- 82 + 22 = 68
- 62 + 82 = 100
- 12 + 02 + 02 = 1
- 12 = 1 ...
となる。数列が1(の繰り返し)で終るため、19はハッピー数である。
ハッピー数の考え方が初めて示されたのは、1970年代のロシアと考えられている[1]。
概要
負でない整数の各桁の数字を分解し、2乗和を取る。この変換をハッピー関数という。できた新しい数で同じ変換を行う。こうしてできた数列をハッピー列と呼ぶ。ハッピー列が1となった場合、以後はずっと1が続く。ハッピー列が1で終る数がハッピー数である。ハッピー数は無数にあり、そのうち最小は1である。
500以下のハッピー数は次の通り:
- 1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100, 103, 109, 129, 130, 133, 139, 167, 176, 188, 190, 192, 193, 203, 208, 219, 226, 230, 236, 239, 262, 263, 280, 291, 293, 301, 302, 310, 313, 319, 320, 326, 329, 331, 338, 356, 362, 365, 367, 368, 376, 379, 383, 386, 391, 392, 397, 404, 409, 440, 446, 464, 469, 478, 487, 490, 496 [2].
ある数字がハッピー数なら、桁の順番を入れ替えた数もハッピー数となる。例えば19はハッピー数なので、91はハッピー数である。また、途中に0を挿入した数もハッピー数となる。例えば109や1090はハッピー数である。0を含む数を除き、桁の順番を入れ替えてできる最小の数のハッピー数だけを並べると、1000までは次のようになる。
- 1, 7, 13, 19, 23, 28, 44, 49, 68, 79, 129, 133, 139, 167, 188, 226, 236, 239, 338, 356, 367, 368, 379, 446, 469, 478, 556, 566, 888, 899[3].
10進数の場合、自然数がハッピー数である確率は1/7である[1]。
ハッピー列
ハッピー関数、ハッピー列のどちらも、ハッピー数以外に当てはめることもできる。
ハッピー列は、最終的に循環列となる。例えば4のハッピー列は、
- 4, 16, 37, 58, 89, 145, 42, 20, 4, ...
となり、周期8の循環列を作る。5のハッピー列は、
- 5, 25, 29, 85, 89, 145, 42, 20, 4, 16, 37, 58, 89, ...
となり、途中から周期8の循環列となる。ハッピー列は1か4に到達するため、ハッピー列に表れる循環列の周期は常に有限(1または8)である[4]。
特殊なハッピー数
- 連続するハッピー数で最小の数は 1, 31, 1880, 7839,…である。(オンライン整数列大辞典の数列 A055629)
- ハッピー数の内、500以下で素数でもあるものは次の通り。ハッピー素数(happy prime)とも呼ばれる。
7, 13, 19, 23, 31, 79, 97, 103, 109, 139, 167, 193, 239, 263, 293, 313, 331, 367, 379, 383, 397, 409, 487[7].
- 10150006 + 7426247×1075000 + 1 はハッピー素数であり、回文素数 でもある。
- ハッピー素数が無数にあるかは分かっていない。2010年時点で知られている最も大きなハッピー素数は、である。
多次元のハッピー数
ここまでは2乗和について説明したが、n次元についても論じることができる。引数xを処理するハッピー関数を
で表すと、最初の19の例では
と表すことができる。
ハッピー数は、本来は最終的に1となる数のみを指すが、「最終的に周期1のハッピー列となるもの」と定義すれば、ハッピー列の終わりは、2次元では0と1の2種、3次元では0, 1, 153, 370, 371, 407の3種、4次元では0, 1, 8208の4種である。周期1のハッピー列に現れる終わりの数字の種類は、各次元で有限個である[4]。
コンピュータプログラムの例
ある数がハッピー数であるかどうかを調べるには、コンピュータを使うのが便利である。Pythonを使ったプログラムの例は次の通り[8]。
SQUARE = dict([(c, int(c) ** 2) for c in "0123456789"])
def is_happy(n):
s = set()
while (n > 1) and (n not in s):
s.add(n)
n = sum(SQUARE[d] for d in str(n))
return n == 1
数学以外での登場
イギリスのSFテレビドラマ『ドクター・フー』新シリーズのシーズン3第7話『42』で、太陽に衝突しようとする宇宙船のドアを開けるキーワードとして (313, 331, 367, 379) の4つのハッピー素数が登場する。
参考文献
- ^ a b R. W. Barnard On Applications of Special Functions to Disparate Fields J. Analysis Volume 18 (2010), 9–2
- ^ オンライン整数列大辞典の数列 A007770
- ^ オンライン整数列大辞典の数列 A124095
- ^ a b 岡本茂 ハピー数について、千葉敬愛短期大学紀要 22, 17-20, 2000-02
- ^ Robert Styer Smallest examples of strings of consecutive happy numbers, 2000 Mathematics Subject Classification
- ^ E. El-Sedy and S. Siksek, On happy numbers, Rocky Mountain J. Math., 30(2000), 565-570.
- ^ オンライン整数列大辞典の数列 A035497
- ^ Happy Number Rosetta Code
関連文献・外部リンク
- Walter Schneider, Mathews: Happy Numbers.
- Weisstein, Eric W. "Happy Number". mathworld.wolfram.com (英語).
- Happy Numbers at The Math Forum.
- Guy, Richard (2004), Unsolved Problems in Number Theory (3 ed.), Springer-Verlag, ISBN 0-387-20860-7
- Reg Allenby page