2021年1月20日水曜日

芥川賞

 第164回の芥川賞が,宇佐見りん「推し、燃ゆ」に決まった。「かか」で2019年の文藝賞と2020年の三島由紀夫賞を受賞したのに続くもので,なかなか凄そうである。

そもそも最近はほとんど本を読まなくなってしまった。情報の入力はインターネット(TwitterやYouTubeやFacebookなど)が中心になってしまい,極めて偏っている。ほとんどがデコレーションされた事実の集積物であり,創られた作品にふれる機会が激減している。あ,映画とかドラマはちょっと見ているかもしれないけれど。

そこで,自分がこれまでの芥川賞作品をどれほど読んできたのかをチェックしたところ,13冊/175冊=7.4%であった。ほとんど読んでいませんでした。なお,※は受賞作は読んでいないものの受賞作以外の作品を複数冊読んだ作家である。1970年代はほぼ立ち読みであったが,三田誠広のものはちょっとひどい作品だったと思う。1970年代は受賞者のインフレも起こってるし,選考委員どうなんだよ状態である。

第4回(1936年下半期) - 石川淳※
第25回(1951年上半期) - 安部公房「壁 S・カルマ氏の犯罪」
第28回(1952年下半期) - 松本清張※
第32回(1954年下半期) - 小島信夫※
第39回(1958年上半期) - 大江健三郎「飼育」
第43回(1960年上半期) - 北杜夫「夜と霧の隅で」
第51回(1964年上半期) - 柴田翔「されどわれらが日々──」
第56回(1966年下半期) - 丸山健二※
第61回(1969年上半期) - 庄司薫「赤頭巾ちゃん気をつけて」
第64回(1970年下半期) - 古井由吉「杳子」
第75回(1976年上半期) - 村上龍「限りなく透明に近いブルー」
第77回(1977年上半期) - 三田誠広「僕って何」
第84回(1980年下半期) - 尾辻克彦「父が消えた」
第98回(1987年下半期) - 池澤夏樹「スティル・ライフ」
第110回(1993年下半期) - 奥泉光「石の来歴」
第115回(1996年上半期) - 川上弘美「蛇を踏む」
第123回(2000年上半期) - 町田康「きれぎれ」
第146回(2011年下半期)- 円城塔※

なお,受賞者中に女性作家が占める割合は80年代に入ってから相転移したようだった。かつては男性作家が受賞者のほとんどを占めていたが,いまではほぼ半数が女性である。下記のテーブルは各年代の受賞者数(カッコ内は女性受賞者の内数)。なお,1945年から1948年は終戦前後の混乱のために中止されている。

1930年代 12(1)
1940年代 13(2)
1950年代 17(0)
1960年代 18(4)
1970年代 27(6)
1980年代 16(8)
1990年代 22(8)
2000年代 22(9)
2010年代 25(12)
2020年代   3(2)


2021年1月19日火曜日

PHITS

 PHITS(Partcle and Heavy Ion Transport code System)は,「あらゆる物質中での様々な放射線挙動を核反応モデルや核データなどを用いて模擬するモンテカルロ計算コードです」ということで,さらに「物質や人体内での放射線の動きをシミュレーションする計算コードです。原子力だけでなく,医学や理学など様々な分野で活用されています」なので,開発者の仁井田浩二さんは,とうとうCOVID-19のモンテカルロシミュレーションに踏み出した。

酔歩するエージェントと散乱断面積の概念はおもしろいけれど,地理状況が人口密度しか反映されていないのであれば,本質的には,微分方程式と変わらないのではないか。それにしても,中野さんといい大西さんといい原子核物理屋のコロナ好きはどこから来るのだろうか。放射性崩壊系列によく似ていて,ちょうど手頃な複雑さを持ったシミュレーションの対象だということなのかな。

2021年1月18日月曜日

日本語版ウィキペディア(2)

 北村紗衣(saebou)さんが,佐藤由美子さんの意見に若干の反論をしていた。彼女のウィキペディアンとしての経験に基づくものであって,事実としては概ね問題ないと思われる。が,本質はやはり歴史修正主義の跋扈である。

2001年1月15日にスタートしたウィキペディアは,今年で開設20周年を迎えることになる。記念イベントとしてオフラインミーティングが東京+サテライト会場で催されるようだ。

退職前の数年の大学院の授業では,ウィキペディアの教育利用を話題にしたことがあって,2008年頃からの動きは少しだけ眺めたことがあるが,その後はほとんど盛り上がらないまま推移していたようだった。

2021年1月17日日曜日

日本語版ウィキペディア(1)

 佐藤由美子さんの「日本語版ウィキペディアで歴史修正主義が広がる理由と解決策」という記事を見たが,まったくそのとおりだと思われる。自然科学の分野でも日本語版ウィキペディアの記事にムラがあると同時に,英語版と比較して非常に内容が薄いことが気になっていた。オープン性に欠けるコミュニティがディスインフォメーション(故意に流す虚偽情報)の温床になっているということだが,右派(あるいは準政府団体)の組織的な活動がSNSに加えてウィキペディアをターゲットにしているということだろう。

2021年1月16日土曜日

都道府県人口当たりのCOVID-19(2)


昨日のデータの全体。総人口と65歳以上は単位が1000人であることに注意する。人口密度は,人/平方キロメートル,感染率と死亡率は,感染数と死亡数を各都道府県の総人口で割ったもの。

都道府県 総人口 65歳以上 高齢化率(%)人口密度 感染数 死亡数 感染率(ppm) 死亡率(ppm)
北海道  5,286  1,656  31.3    69  15,300  521  2,894  99
青森県  1,263  412  32.6  136  607      8  481  6
岩手県  1,241  403  32.5    84  449    25  362  20
宮城県  2,316  643  27.8  321  2,813    17  1,215  7
秋田県  981  357  36.4    88  181      1  185  1
山形県  1,090  358  32.9  121  438    12  402  11
福島県  1,864  576  30.9  139  1,337    30  717  16
茨城県  2,877  833  28.9  478  3,458    41  1,202  14
栃木県  1,946  546  28.0  308  2,916    16  1,498  8
群馬県  1,952  574  29.4  310  3,066    57  1,571  29
埼玉県  7,330  1,934  26.4  1,913  19,277  258  2,630  35
千葉県  6,255  1,721  27.5  1,207  15,868  160  2,537  26
東京都  13,822  3,189  23.1  6,169  80,068  707  5,793  51
神奈川県  9,177  2,305  25.1  3,778  30,690  340  3,344  37
新潟県  2,246  716  31.9  183  739      5  329  2
富山県  1,050  336  32.0  251  768    26  731  25
石川県  1,143  334  29.2  276  1,267    53  1,108  46
福井県  774  234  30.2  188  411    12  531  16
山梨県  817  248  30.3  187  816    11  999  13
長野県  2,063  651  31.5  155  1,819    21  882  10
岐阜県  1,997  595  29.8  191  3,288    52  1,646  26
静岡県  3,659  1,081  29.5  476  3,654    59  999  16
愛知県  7,537  1,875  24.9  1,447  20,399  305  2,707  40
三重県  1,791  527  29.4    31  1,672    23  934  13
滋賀県  1,412  363  25.7  352  1,661    17  1,176  12
京都府  2,591  749  28.9  566  6,463    78  2,494  30
大阪府  8,813  2,420  27.5  4,640  36,434  714  4,134  81
兵庫県  5,484  1,577  28.8  659  12,978  298  2,367  54
奈良県  1,339  413  30.9  370  2,430    31  1,815  23
和歌山県  935  306  32.7  204  819      9  876  10
鳥取県  560  177  31.6  164  173      2  309  4
島根県  680  231  34.0  104  231      0  340  0
岡山県  1,898  571  30.1  270  1,967    16  1,036  8
広島県  2,817  817  29.0  335  4,271    66  1,516  23
山口県  1,370  465  33.9  230  760      5  555  4
徳島県  736  243  33.1  182  272      9  370  12
香川県  962  303  31.5  520  477      4  496  4
愛媛県  1,352  441  32.6  244  762    13  564  10
高知県  706  245  34.8  103  757    12  1,072  17
福岡県  5,107  1,408  27.6  1,023  12,349  136  2,418  27
佐賀県  819  244  29.7  341  698      3  852  4
長崎県  1,341  429  32.0  333  1,157    10  863  7
熊本県  1,757  537  30.6  241  2,732    36  1,555  20
大分県  1,144  371  32.4  184  885      9  774  8
宮崎県  1,081  342  31.7  143  1,426    11  1,319  10
鹿児島県  1,614  506  31.4  179  1,318    14  817  9
沖縄県  1,448  313  21.6  628  6,107    86  4,218  59
                 
全 国  126,443 35,575 1,414 30,517 308,428 4,339  2,439  34

(情報:NHKまとめ 2021/1/15現在)

2021年1月15日金曜日

都道府県人口当たりのCOVID-19(1)

新型コロナウイルス感染症の死亡数で,大阪府がトップに立っている。 各都道府県の人口で規格化すると1/14/2021現在では次のようになっている。

1 北海道 99(31.3%)
2 大阪府 81(27.5%)
3 沖縄県 59(21.6%)
4 兵庫県 54(28.8%)
5 東京都 51(23.1%)
6 石川県 46(29.2%)
7 愛知県 40(24.9%)
8 神奈川県37(25.1%)
9 埼玉県 35(26.4%)
10 京都府 30(28.9%)
(100万人あたりの死亡数累計,全国平均は 34,カッコ内は65歳以上人口の比率)

このうち北海道,沖縄県,石川県が緊急事態宣言の対象区域に入っていない。それにしても,北海道と大阪府は群を抜いている。ニュースでは高齢者がどうこうという言い訳がされていたが,単純な高齢化率は,他の都道府県と比べても重要な因子とは思われない。高齢者に対する医療福祉体制が大阪府では極端に劣っているというのであれば,大阪維新のこれまでの政策から納得できる。

ところで,感染数の人口比や死亡数/感染数をみるとまた違った見え方があらわれる(奈良県危ないじゃないですか・・・)
1 東京都 5793(0.88%)
2 沖縄県 4218(1.41%)
3 大阪府 4134(1.96%)
4 神奈川県3344(1.11%)
5 北海道 2894(3.41%)
6 愛知県 2707(1.50%)
7 埼玉県 2630(1.34%)
8 千葉県 2537(1.01%)
9 京都府 2494(1.21%)
10 福岡県 2418(1.10%)
11 兵庫県 2367(2.30%)
12 奈良県 1815(1.28%)
(100万人あたりの感染数累計,全国平均は 2439,カッコ内は死亡率/感染率,全国平均は
1.41%)

さらに謎のデータが。ある時点での死亡率/感染率=死亡数累計/感染数累計は,CFR(致命率)の近似値と考えてもよいかもしれないが,全国平均の数倍に達する地域がある。北海道や石川県は一時感染者が急増して混乱状態になっていたような気もするが,岩手県や福井県など,そもそも感染数が少ないところでこの値というのはどういうことなのだろうか。感染者が十分に補足できていないということなのかもしれない。

1 岩手県 5.57%
2 石川県 4.18%
3 北海道 3.41%
4 富山県 3.39%
5 徳島県 3.31%
6 福井県 2.92%
7 山形県 2.74%
8 兵庫県 2.30%
9 福島県 2.24%
10 大阪府 1.96%
(先のカッコ内と同様の死亡率/感染率=死亡数累計/感染数累計,全国平均は1.41%)

(情報:NHKまとめ 2021/1/15現在)・・・NHKのクレジット表示の指示がちょっといまいち。


2021年1月14日木曜日

中性子寿命問題

「物質の科学2」の 演習課題に関わって,日本の加速器でもっともエネルギーの高いものは何かを調らべてみた。筑波のKEKの加速器だろうと思っていたが,このメインマシンはCP非保存検証のためのBファクトリーであって,大強度ビームを追求するものだった。このKEKBは電子8GeV,陽電子3.5GeVのコライダーでウプシロン粒子(b\bar{b})を生成して,崩壊するB中間子と反B中間子の崩壊モードを比べている。なお,増強されたSuperKEKBはルミノシティが40倍になる電子7GeV,陽電子5GeVのコライダーだ。

高エネルギー加速器研究機構(KEK)と日本原子力研究開発機構(JAEA)が茨城県大洗で共同運用しているのが,大強度陽子加速器施設(J-PARC)である。J-PARCの加速器は,線形加速器(400MeV),陽子シンクロトロン(3GeV),陽子シンクロトロン(50GeV)のメインリングからなる。50GeVのPSは今のところ30GeVで運用しているようだ。

さて,中性子寿命問題である。これまでの中性子寿命の実験的検証方法にはビーム法とボトル法の2種類があり,ビーム法では888秒,ボトル法では879秒で,9秒という有意の差があり,これが埋まっていない。前者はビームが通過しながら崩壊する際の陽子をカウントし,後者は閉じ込めた中性子の数の変化をカウントしている。もしこれが正しいのであれば,ビーム法で観測されているモード(n→p+n+ν)以外の遷移があることになる,

理論的な可能性として,ミラー中性子(mirror matter)の存在が示唆され,ミラー物質はダークマターの候補にもなっているようだがまだまだわからない。J-PARCにおけるKEKグループの実験は,第3の測定方法を定義するものであり,パルス中性子が崩壊する際の電子をカウントする。ただし,まだ実験誤差が大きすぎてこれから詰めていく段階である。



2021年1月13日水曜日

寒中見舞い

 寒中見舞いは,二十四節気の小寒と大寒の間に出す見舞い。定年退職を期に年賀状はやめることにしたのだけれど,親戚についてはまだ完全にはストップできない。それでも年々これが最後ですという年賀状が届くようになってきた。なお,年賀状をいただいた知人には,寒中見舞いを出すことにした(が,いつまで続くだろう・・・)。ちなみに今年の年賀状(親戚分)のデザインは下記のとおりであった。


写真:奈良市の植村牧場にて


2021年1月12日火曜日

Alfred(2)

Alfred(1)からの続き

というわけで,とりあえずできたのだけれど・・・微妙に動作が思ったとおりにならない。内部で呼び出していると思われるSiri のデータに問題があるのだろうか。試行錯誤の結果とりあえず下記のやりかたでできたのだが,実際に試してみるとなんだか検索漏れがある・・・

(1) AlfredのPreferenceでWorkFlowを選択する。

(2) 画面左下の+ボタンで新しいBlankWindowを作成する。名前をつけて,説明を加え,CategoryはUncategorizedにする。Bundle IDとCreated ByとWebsiteは適当でよいのかもしれない。

(3) できた新規Workflowの画面で黒い画面を右クリック(Ctrl+クリック)して,InputsからFile Filterを選択する。

(4) keywordは コマンドをキックする短い文字列としてwith spaceにチェックしておけば良い。Placeholder titleとPlaceholder subjectも適当でよいのかもしれない。Filetypeにpdfとdjvとpublic.folderを指定したが,これは見本をdrag&dropすればよろしい。

(5) scopeには検索対象のfolderを指定するとこれでできあがり。



2021年1月11日月曜日

外国等に対する我が国の民事裁判権に関する法律

 論理的には,この「外国等に対する我が国の民事裁判権に関する法律」の逆過程なので,そこで主張の妥当性が判断されるのがひとつ。さらには,国際的にはどのような原則が確立されているかということだが,「国及びその財産の裁判権からの免除に関する国際連合条約」についてという文書が外務省にある。この国連国家免除条約本体はこちら

報道では,かつての絶対免除主義「国及びその財産については,すべて無条件に他の国の裁判所の裁判権からの免除を認めること」が,現在でも国際的な原則であるかのような印象を与える説明がなされているが,そうでもないかもしれない。なお,条約の締約国は19カ国なので,まだ発効されていない。

2021年1月10日日曜日

人工血液

 新型コロナウイルス感染症の蔓延にともなって,献血機会が減少し,日本の医療活動に必要な血液が確保できないのではないかというニュースが流れていた。そこで,人工血液というのはまだ開発されていないのかどうか調べてみた。

日本血液代替物学会が存在するくらいなので,研究は進んでいると考えられる。学会誌の「人工血液」は会員以外の誰でも自由にpdfファイルで読むことができるのがありがたい。奈良県立大学の酒井宏水先生が現在の学会長だ。

人工血液の1つとして,赤血球の酸素運搬機能を代替する人工の微粒子である人工赤血球がある。日赤や医療機関で発生する期限切れ非使用赤血球(検査済み)から,酸素を結合するタンパク質ヘモグロビン(Hb)を精製分離し,これを濃度高くリポソームに封入した微粒子であり,ヘモグロビンベシクル(Hb-V)とよばれるものがその一例だ。

また,血小板輸血に関しては,室温保存による細菌繁殖に起因する感染症を防止する目的で,法制上,血小板製剤の保存期間が4日以内に限定されており,血小板輸血に対する抜本的な供給システムの構築が喫緊の課題である。このため,iPS細胞から血小板を大量に生産するための方法が研究されている。

白血球は難しいのではないかと思ったが,逆にこれは薬で代替することができて,赤血球や血小板の方が残念ながら今の医療技術では作れないので献血してほしいとのことだった。

2021年1月9日土曜日

パルスオキシメーター

ついこの間まで,パルスオキシメーターのことを「パルスオキシメーター」 とよぶのだと勘違いしたままだった。テレビのニュースで,ようやく誤った知識が訂正された。

パルスオキシメーターは光を使って血液の酸素飽和度を測る装置である。新型コロナウィルス感染症において,無症状の段階でもその兆候を捉えるために用いられるというニュースだったような気がする。

酸素飽和度(SaO2)は,血液中のヘモグロビンが酸素と結合している割合を表す量であり,ヘモグロビンをHbと書くと,[HbO2] = HbO2 / (HbO2+Hb)として,実際には,(HbO2) = [HbO2]/ [HbO2]max で与えられる。maxは最大酸素飽和度の場合の値を意味しているので,(HbO2)の最大値は100%になる。なお,酸素飽和度には,SvO2(静脈酸素飽和度),StO2(組織酸素飽和度),SpO2(末梢酸素飽和度)があって,パルスオキシメータで測定されるのはSpO2である。

パルスオキシメータの原理については,コニカミノルタのページが詳しい(1977年に世界で最初に商品化した)。Hbは赤色光をよく吸収するが,HbO2は赤い光を透過するので血液が赤く見える。一方,HbとHbO2はともに赤外光はあまり吸収しない。そこで,赤外光IRを基準とした赤色光Rの強度,R/IRがわかれば,HbO2/Hbがわかることになる。パルスオキシメータでは脈動する血液についてのR/IRの変化成分を測定するため動脈血を見ていることに対応する。

SpO2が95%以上であれば正常,90-95%で注意,90%未満ではなんらかの処置が必要となる。ただ,新型コロナウイルス感染症の低酸素症では,よくわからないことが起きているようだ。

なお,ヒトのヘモグロビンは,ヘムとよばれる鉄原子を中心とした錯体をかこむ4ユニットから成る分子量64500のタンパク質分子である。

2021年1月8日金曜日

合衆国憲法修正第25条

 アメリカ合衆国憲法修正第25条は,アメリカ合衆国大統領の承継方法や,大統領がその職務上の権限と義務を遂行することができない場合の対処法を規定している。


修正第25条[大統領の地位の継承] [1967 年成立]

第1項 大統領が免職され、死亡しまたは辞任した場合には、副大統領が大統領となる。

第2項 副大統領が欠けたときは、大統領が副大統領を指名し、指名された者は、連邦議会の両院の過半数の承認を経て、副大統領の職に就く。

第3項 大統領が、上院の臨時議長および下院の議長に対し、その職務上の権限および義務を遂行することができない旨を書面で通告したときは、その後大統領が権限および義務を遂行することができる旨を書面で通告するまで、副大統領が臨時大統領としてかかる権限および義務を遂行する。

第4項[1号] 副大統領、および行政各部の長または連邦議会が法律で定める他の機関の長のいずれかの過半数が、上院の臨時議長および下院議長に対し、大統領がその職務上の権限および義務を遂行できな い旨を書面で通告したときは、副大統領は、直ちに臨時大統領として、大統領職の権限および義務を遂行するものとする。

[2号]その後、大統領が上院の臨時議長および下院議長に対し、職務遂行不能状態は存在しない旨を書面で通告したときは、大統領はその職務上の権限および義務を回復する。但し、副大統領および行政各部の長または連邦議会が法律で定める他の機関の長のいずれかの過半数が、4 日以内に、上院の臨時議長と下院議長に対し、大統領がその職務上の権限および義務を遂行できない旨を書面で通告したときは、この限りでない。この場合には、連邦議会は、開会中でないときには48 時間以内にその目的のために集会し、問題を決定するものとする。連邦議会が、大統領が職務上の権限および義務を遂行することができない旨を通告する書面を受理してから21 日以内に、または、連邦議会が開会中でないときは、集会の要請があってから21 日以内に、両議院の3 分の2 の投票により、大統領はその職務上の権限および義務を遂行することができない旨を決議したときは、引き続き副大統領が臨時大統領としてかかる権限および義務を遂行する。 かかる決議がなされなかった場合には、大統領はその職務上の権限と義務を回復するものとする。

 

アメリカ合衆国憲法

第2章[執行部]

第1条[大統領と副大統領、選出方法]

[第6項]大統領が罷免され、死亡し、辞職し、またはその職権および義務を遂行する能力を失ったときは、副大統領が、大統領の職務を行う。連邦議会は、大統領と副大統領がともに罷免され、死亡し、辞職し、または執務不能に陥った場合について、法律により、いかなる官吏に大統領の職務を行わせるかを定めることができる。この官吏は、執務不能の状態が解消される時または大統領が選出される時まで、大統領の職務を行う。



2021年1月7日木曜日

逆順と平方(3)

逆順と平方(2)からの続き

9桁までの範囲で考えるとしても,3億個のデータのうち条件を満足するのが高々7000個なので,ほとんど無駄な計算をしていることになる。そこで,プログラムは汚くとも,もう少し計算を簡略化できないかと考えた結果,12桁までの計算が数分程度で可能になった。2〜3桁分をまとめてループをまわしているが,この範囲でよいという証明はしたわけではなく,直感に頼っているのだった。


function reverse(n,m)
  nun=zeros(Int,m)
  nre=0
  for k in 1:m
    nun[k] = n % 10
    nre = nre + nun[k]*10^(m-k)
    n = div(n - nun[k],10)
  end
  return nre
end

function counter(n)
  a = [0 1 2 3 10 11 12 13 20 21 22 23 30 31 100 101 102 103 110 111 112 113 120 121 122 123 130 131 200 201 202 203 210 211 212 213 220 221 222 223 230 231 300 301 302 303 310 311 312 313]
  b = [50 4 14]
  c = [10^3 10 10^2]
  cnt=1
  kk = c[n%3+1]
  k1max = b[n%3+1]
  k2max = 1 + div(n+10,14)*49
  k3max = 1 + div(n+10,17)*49
  k4max = 1 + div(n+10,20)*49
  for k1 in 1:k1max
    for k2 in 1:k2max
      for k3 in 1:k3max
        for k4 in 1:k4max
          k=a[k1]+a[k2]*kk+a[k3]*kk*10^3+a[k4]*kk*10^6
          if(k!=0)
            m=Int(ceil(log10(k)+10^(-9)))
            kj=BigInt(k)^2
            mj=Int(ceil(log10(kj)+10^(-9)))
            kr=reverse(k,m)
            krj=BigInt(kr)^2
            if(reverse(kj,mj)==krj)
# println(k,":",kr,":",kr^2,":",reverse(k^2,mj))
              cnt=cnt+1
            end
          end
        end
      end
    end
  end
  return cnt
end

for i in 1:12
  @time println(i," : ",counter(i))
end


1 : 4
0.000491 seconds (176 allocations: 6.000 KiB)
2 : 13
0.000551 seconds (765 allocations: 22.258 KiB)
3 : 37
0.002469 seconds (3.68 k allocations: 96.281 KiB)
4 : 100
0.005823 seconds (18.99 k allocations: 466.195 KiB)
5 : 253
0.021409 seconds (81.69 k allocations: 1.886 MiB)
6 : 615
0.091992 seconds (346.74 k allocations: 7.780 MiB)
7 : 1434
0.441439 seconds (1.61 M allocations: 35.324 MiB, 11.21% gc time)
8 : 3244
1.616126 seconds (6.39 M allocations: 138.140 MiB, 11.31% gc time)
9 : 7116
6.780644 seconds (25.58 M allocations: 546.322 MiB, 13.04% gc time)
10 : 15200
28.310428 seconds (113.32 M allocations: 2.337 GiB, 13.25% gc time)
11 : 23284
108.389549 seconds (437.13 M allocations: 8.934 GiB, 13.71% gc time)
12 : 31368
417.966111 seconds (1.71 G allocations: 34.604 GiB, 14.30% gc time)

2021年1月6日水曜日

逆順と平方(2)

逆順と平方(1)からの続き

中嶋慧さんのpythonによる逆順関数がスマートだったので Juliaでも試してみた。数値を文字列に変換して,逆順にしたものをもういちど数値に戻すというものだ。プログラムとしてはスッキリしたけれど,実行時間が倍になってしまった。


function rev(n)
  b = string(n)
  c = b[end:-1:1]
  d = parse(Int,c)
  return d
end

function counter(m,j)
  cnt = 1
  kmax = Int(ceil(10^(m-1)*sqrt(10)))
  for k in 10^(m-1)+1:kmax
    kr = rev(k)
# kj = BigInt(k)^j
# krj = BigInt(kr)^j
    kj = k*k
    krj = kr*kr
    if(rev(kj)==krj)
# if(2000<=k<=2299)
# println(k,":",kr,":",kr^j,":",rev(k^j))
# end
      cnt = cnt + 1
    end
  end
  return cnt
end

function list(l,j)
  sum=1
  for i in 1:l
    @time sum = sum + counter(i,j)
    println(i," **",j," = ",sum)
  end
end


list(9,2)
0.000010 seconds (36 allocations: 1.781 KiB)
1 **2 = 4
0.000015 seconds (264 allocations: 13.062 KiB)
2 **2 = 13
0.000138 seconds (2.60 k allocations: 128.844 KiB)
3 **2 = 37
0.001734 seconds (25.96 k allocations: 1.254 MiB)
4 **2 = 100
0.016847 seconds (259.48 k allocations: 12.538 MiB)
5 **2 = 253
0.224788 seconds (2.59 M allocations: 125.376 MiB, 12.69% gc time)
6 **2 = 615
2.393325 seconds (25.95 M allocations: 1.224 GiB, 12.89% gc time)
7 **2 = 1434
26.113517 seconds (259.47 M allocations: 12.244 GiB, 11.55% gc time)
8 **2 = 3244
284.531202 seconds (2.59 G allocations: 128.882 GiB, 11.40% gc time)
9 **2 = 7116

2021年1月5日火曜日

逆順と平方(1)

 中嶋慧さんが,次のようなプログラムについての話題を提供していた。ある数nの逆順に並べた数をrev(n)とする。例えば,rev(123)は321である。このとき,rev(n^2)=rev(n)^2を満たすm桁の数nは,何個あるかという問題だ。pythonでは時間がかかるので,juliaにするとよいのではないかという提案だったが,残念ながら,工夫に乏しい10^8個の計算はやたら時間を食うだけだった(追伸:条件が rev(rev(k)^2) = k^2 であると誤解していたので,その後訂正したところ,中嶋さんの結果と一致した)。


function reverse(n,m)
  nun = zeros(Int,m)
  nre = 0
  for k in 1:m
    nun[k] = n % 10
    nre = nre + nun[k]*10^(m-k)
    n = div(n - nun[k],10)
  end
  return nre
end

function counter(m)
  cnt = 1
  kmax = Int64(ceil(10^(m-1)*sqrt(10)))
  for k in 10^(m-1)+1:kmax
    kr = reverse(k,m)
    m2 = Int(ceil(log10(k*k)))
    if(reverse(k*k,m2)==kr*kr)
# if(2000<=k<=2299)
# println(k,":",kr,":",kr^2,":",reverse(kr^2,m2),":",k^2)
# end
      cnt = cnt+1
    end
  end
  return cnt
end

function list(l)
  sum = 0
  for i in 1:l
    @time sum = sum + counter(i)
    println(i," : ",sum)
  end
end

list(9)
0.000003 seconds (6 allocations: 576 bytes)
1 : 4
0.000009 seconds (44 allocations: 4.469 KiB)
2 : 13
0.000097 seconds (434 allocations: 50.859 KiB)
3 : 37
0.000901 seconds (4.33 k allocations: 540.750 KiB)
4 : 100
0.011719 seconds (43.25 k allocations: 5.939 MiB)
5 : 253
0.145435 seconds (432.46 k allocations: 62.688 MiB, 12.05% gc time)
6 : 615
1.100731 seconds (4.32 M allocations: 692.869 MiB, 17.40% gc time)
7 : 1434
11.497505 seconds (43.25 M allocations: 7.088 GiB, 16.11% gc time)
8 : 3244
132.445766 seconds (432.46 M allocations: 77.329 GiB, 16.48% gc time)
9 : 7116

2021年1月4日月曜日

2021年1月2日土曜日