« ヒメハラナガツチバチ | トップページ | 新月 »

2015年10月22日 (木)

ナルシシスト数

1002_15matubabotan 2015.10.2
スキマのマツバボタン。雨の水溜りに映っています。{ぼんやりでスミマセン}
ここから「ナルシシスト」の話を連想したのでした。
↓以前の記事
http://yamada-kuebiko.cocolog-nifty.com/blog/2015/09/post-0c5f.html
2015年9月15日 (火)「私って美しい」

★私も「ナルシシスト」か「ナルシスト」か、ちょっとチェックのために検索していたら、変なものを見つけました。
「ナルシシスト数」というものです。これ、話が長くなりそうなので、しばらく時間がかかるかもしれませんが後で書き直します。

一月以上経ってしまいました、充分に発酵・熟成したのかな?
いやあ、過発酵で、エタノールが酢になっちまった気がする。

★まず、ナルシシスト数の定義から。
https://ja.wikipedia.org/wiki/%E3%83%8A%E3%83%AB%E3%82%B7%E3%82%B7%E3%82%B9%E3%83%88%E6%95%B0

ナルシシスト数
 ナルシシスト数(ナルシシストすう、英: narcissistic number)とは、n桁の自然数であって、その各桁の数のn乗の和が、元の自然数に等しくなるような数をいう。例えば、1^3 + 5^3 + 3^3 = 153 であるから、153 はナルシシスト数である。
 定義より明らかに、1桁の自然数は全てナルシシスト数である。2桁のナルシシスト数は存在しない。ハーディは、著書『ある数学者の生涯と弁明』において、3桁のナルシシスト数は、153, 370, 371, 407 のみであることに言及している。ナルシシスト数を小さな方から列挙すると、
    1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, … (オンライン整数列大辞典の数列 A005188)
となる。
 ナルシシスト数が有限個しか存在しないことは、簡単に証明できる。n桁の自然数のうち、各桁のn乗和が最大になるのは、(10^n) - 1 に対する n ×(9^n) である。一方、n 桁の自然数のうち、最小のものは 10^(n-1) である。十分大きな n に対して n × 9^n < 10^(n-1) となる(実際、n > 60 でこの不等式は成り立つ)が、そのような n に対しては、n桁のナルシシスト数は存在しない。
 ナルシシスト数は(0を含めないならば)全部で87個存在し、その最大のものは39桁の数
    115132219018763992565095597973971522401
である。

ということなのです。
「n桁の自然数であって、その各桁の数のn乗の和が、元の自然数に等しくなるような数」
単純な話ではあります。全くもってコンピューター向き、プログラムもさして難しくはなさそう。

★「NarcissisticNum.BAS」というプログラムを十進BASICで書きました。
「##…###」の間がプログラムです。「!」はリマークで、先頭に「!」のある行はプログラムの実行に全く影響しません。

####################
! ナルシシスト数(narcissistic number)
! n桁の自然数であって、その各桁の数のn乗の和が、元の自然数に等しくなるような数。
! 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, …
! ナルシシスト数は(0を含めないならば)全部で87個存在し、その最大のものは39桁の数
! 115132219018763992565095597973971522401

OPTION BASE 0
DIM a(10)

INPUT  PROMPT "n = ":n

LET minimum = 10^(n-1)
LET maximum = 10^n - 1

LET a(0) = 0
LET a(1) = 1
FOR i = 2 TO 9
   LET a(i) = i^n
NEXT i

LET t0=TIME
FOR i = minimum TO maximum
   LET tmp = i
   LET sum = 0
   FOR j = 0 TO n-1
      LET b = MOD(tmp, 10)
      LET sum = sum + a(b)
      LET tmp = INT(tmp / 10)
   NEXT j
   IF sum = i THEN
      PRINT i
   END IF
NEXT i
PRINT TIME - t0
PRINT "#"
END
####################

★結果
{ここでの「#」は終了マークに使っています。その直前の数字は実行に要した時間です。}

n = 1
1
2
3
4
5
6
7
8
9
.03
#

n = 3
153
370
371
407
.11
#

n = 4
1634
8208
9474
.16
#
ここまではウィキペディアに記載があります。
で、先へ進んだのですが。
n = 5
54748
92727
93084
1.12
#

n = 6
548834
12.82
#

n = 7
1741725
4210818
9800817
9926315
140.1
#

n =  8
24678050
24678051
{中断=や~めた}

数を全部チェックしなければならないので、nが1増えると、チェックする数も10倍になり、実行時間もほぼ10倍になります。
予測としては、n=7で140秒≒2.3分ですから、n=8の場合、20分を超えるでしょう。
n=9などになったら、200分か。付き合いきれないや。
n=10 までやってやろうか、などという目論見は敢無く破綻したのでした。

「その最大のものは39桁の数 115132219018763992565095597973971522401」なんて誰が求めたんだ?
パソコンの並列接続くらいでできるんですかね、それともスーパーコンピューター?{お金がかかりそうだ}

★でもって、意地を張りました。
「115132219018763992565095597973971522401」
これがナルシシスト数になっていることを確かめてみよう。
プログラムはファイルにしておきました。
「NarcissisticNumV2.txt」をダウンロード

1000桁モードで実行しないといけません。
プログラムは単純、定義通り。
ただ、「39桁」の「39」を自分で与えるのは癪だから、チェックすべき数をいったん文字列に変えて、文字列の長さを返す関数で桁数を得る、という「凝った」ことをしてみました。
結果は↓
39
115132219018763992565095597973971522401
115132219018763992565095597973971522401

上の段がプログラムに与えた数。
下の段は各桁を39乗してたした結果。

人間のパターン認識能力はすごい。
このように表示すれば、一目で上下が同じだということがわかります。

やっと終わった。

« ヒメハラナガツチバチ | トップページ | 新月 »

理科おじさん」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« ヒメハラナガツチバチ | トップページ | 新月 »

2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
サイト内検索
ココログ最強検索 by 暴想
無料ブログはココログ