1089桁の奇跡の素数を検証してみる

# 1089桁の素数の検証

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">1089桁の数字、それ自体が素数なだけでなく、33x33の正方形にすると、全ての行と列、さらに対角線の数値もそれぞれ素数（おまけに、全て左右反転しても素数）らしい。神は何を考えているんだ。<a href="https://t.co/18X1u1HlDV">https://t.co/18X1u1HlDV</a></p>&mdash; ぐれさん (@grethlen) <a href="https://twitter.com/grethlen/status/875920075634507782">June 17, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

1089桁の面白い素数があるそうです。
http://primes.utm.edu/curios/page.php?number_id=2962
あまりによくできているので、本当かどうか検証。

1089primeというファイルに1089桁の素数を33x33で格納。

```
~ $ cat 1089prime
313991399371199131139799331911377
147529895941991587879456361416793
343797754289852575517133312684269
943695978946644516863648961536981
354977375935673418795287369494189
373478623641239162919379269294319
941871985794933399739235523691657
154837889117834232678974449658279
117129522895488222612449716435651
112797868118722475112367318718359
954332756851152845673554343833423
958324129279242571543956244312159
149656971499164148747227159798119
915531789396889314926554998567389
189177184378411356887579966732519
395769634484946484155736859195773
976485587598811713196922772648319
742413259665798111566314845954551
344321292792178583218155711143611
735499324729469232679643212644511
755544726594454683193623626957711
324895114496128478896375157597659
974246467315936911531792288239249
136494329788845728831611728857639
343337449493221561738959339141347
119138332653219119612984163669317
356624631952956188127648784846583
361813646131913157456632928169513
747231224138425962243343371145487
745954412587484837933238642278851
955148574512595199969685612245439
118737626399742196143742577819117
917319979999777371311371999793393
```

## まずは数値全体

opensslコマンドのprimeを使うと、AKS素数判定法で高速判定してくれる。確かに素数っぽい。

```
~ $ cat 1089prime  | tr -dc 0-9 | xargs openssl prime
F0443FADB6D84BF1CC6A3E022437FC929112C872D43CB8A14175CDD70F4E7275867D0961A6D2FED954048CD5E972D77F8784949C9B64B7761E55F9FFF018B90AE118614B6F58F0B5B2E38FC141EC4D6348B83A01DA96CD8F5BC5E9E9425DB67FF0BD6A7F9BB44EA18EB9329968A9F332EAB22FD7379545F081A6B76290F20E5ED0BC17D0F5C9ED231216E059FA87E083F4A81BD2F471E3A953E7AFEFB9349234D422E0AB64BB2AADFA90A9D5FA09CFE871FF3363A92A7A251165B834B4BA96B0CE1C4F8D6E5073B1383E7F2A627E9B84087A20C6083B029279A63D235019FAD267028C1CAD63200EA938B2C683E7C7B9E770B638ED93AAE981A4BEB3E28AF537967734FC89308D22F6539CB4EAE6042F15A8C08A439AD99F5FBC125DFA118532D594355BF7C2B481F12D6AF9ACCB9436DD915D02E35DF9614A0B156E97EC78CB023C182E6CB6AE3C2E0F635E67E99506057D41555AD243CF81F02D2099CC29E2A8AD2F4B82FBFF58212484A6D10C1FBE9AD1E42DDBB938956074A86DB9EBDCB00511B391FAF80B2D4F41A68199E3D86BD4E2D1CC204E475DDDF4042EDF0BAE3E971698EE82C751D4A96378EC8158D09F2EFAA694BD7F7ADBCAF6FC8E7A432F25990050F1
is prime
```

## 各行の検証

桁が少ないのでfactorコマンドで素因数分解。

### 通常(各行)
素数だった

```
~ $ cat 1089prime  | factor
313991399371199131139799331911377: 313991399371199131139799331911377
147529895941991587879456361416793: 147529895941991587879456361416793
343797754289852575517133312684269: 343797754289852575517133312684269
943695978946644516863648961536981: 943695978946644516863648961536981
354977375935673418795287369494189: 354977375935673418795287369494189
373478623641239162919379269294319: 373478623641239162919379269294319
941871985794933399739235523691657: 941871985794933399739235523691657
154837889117834232678974449658279: 154837889117834232678974449658279
117129522895488222612449716435651: 117129522895488222612449716435651
112797868118722475112367318718359: 112797868118722475112367318718359
954332756851152845673554343833423: 954332756851152845673554343833423
958324129279242571543956244312159: 958324129279242571543956244312159
149656971499164148747227159798119: 149656971499164148747227159798119
915531789396889314926554998567389: 915531789396889314926554998567389
189177184378411356887579966732519: 189177184378411356887579966732519
395769634484946484155736859195773: 395769634484946484155736859195773
976485587598811713196922772648319: 976485587598811713196922772648319
742413259665798111566314845954551: 742413259665798111566314845954551
344321292792178583218155711143611: 344321292792178583218155711143611
735499324729469232679643212644511: 735499324729469232679643212644511
755544726594454683193623626957711: 755544726594454683193623626957711
324895114496128478896375157597659: 324895114496128478896375157597659
974246467315936911531792288239249: 974246467315936911531792288239249
136494329788845728831611728857639: 136494329788845728831611728857639
343337449493221561738959339141347: 343337449493221561738959339141347
119138332653219119612984163669317: 119138332653219119612984163669317
356624631952956188127648784846583: 356624631952956188127648784846583
361813646131913157456632928169513: 361813646131913157456632928169513
747231224138425962243343371145487: 747231224138425962243343371145487
745954412587484837933238642278851: 745954412587484837933238642278851
955148574512595199969685612245439: 955148574512595199969685612245439
118737626399742196143742577819117: 118737626399742196143742577819117
917319979999777371311371999793393: 917319979999777371311371999793393
```

### 反転(各行)

revコマンドを使うと行全体を左右反転してくれる。

素数だった

```
~ $ cat 1089prime  | rev | factor
773119133997931131991173993199313: 773119133997931131991173993199313
397614163654978785199149598925741: 397614163654978785199149598925741
962486213331715575258982457797343: 962486213331715575258982457797343
189635169846368615446649879596349: 189635169846368615446649879596349
981494963782597814376539573779453: 981494963782597814376539573779453
913492962973919261932146326874373: 913492962973919261932146326874373
756196325532937993339497589178149: 756196325532937993339497589178149
972856944479876232438711988738451: 972856944479876232438711988738451
156534617944216222884598225921711: 156534617944216222884598225921711
953817813763211574227811868797211: 953817813763211574227811868797211
324338343455376548251158657233459: 324338343455376548251158657233459
951213442659345175242972921423859: 951213442659345175242972921423859
911897951722747841461994179656941: 911897951722747841461994179656941
983765899455629413988693987135519: 983765899455629413988693987135519
915237669975788653114873481771981: 915237669975788653114873481771981
377591958637551484649484436967593: 377591958637551484649484436967593
913846277229691317118895785584679: 913846277229691317118895785584679
155459548413665111897566952314247: 155459548413665111897566952314247
116341117551812385871297292123443: 116341117551812385871297292123443
115446212346976232964927423994537: 115446212346976232964927423994537
117759626326391386454495627445557: 117759626326391386454495627445557
956795751573698874821694411598423: 956795751573698874821694411598423
942932882297135119639513764642479: 942932882297135119639513764642479
936758827116138827548887923494631: 936758827116138827548887923494631
743141933959837165122394944733343: 743141933959837165122394944733343
713966361489216911912356233831911: 713966361489216911912356233831911
385648487846721881659259136426653: 385648487846721881659259136426653
315961829236654751319131646318163: 315961829236654751319131646318163
784541173343342269524831422132747: 784541173343342269524831422132747
158872246832339738484785214459547: 158872246832339738484785214459547
934542216586969991595215475841559: 934542216586969991595215475841559
711918775247341691247993626737811: 711918775247341691247993626737811
393397999173113173777999979913719: 393397999173113173777999979913719
```

## 各列

rsコマンドの力を借りる。
入力の行列を入れ替える。

```
~ $ cat 1089prime | sed 's/./& /g;s/ $//' | rs -T | sed 's/ //g'
313933911199191397377391313377919
144457451155418974435273415644511
373343147248959562455446396175587
957694881733651744345824316829173
929977732932537681294949332135431
197578179724617953194564784314879
387936985871971652237143436624569
995772882652788385922162433421727
954853592869194479246479921642469
392996718182433456775437469115539
748434919157997896929918955338199
119651475819968485294658332187299
198662984712184987144198229944577
995473338254681419765234215128947
912439348222491618894865196354527
155541322485133471526497511198113
387116932747415811838712618563997
175682922551846431323818198727961
185879766165798115261858761429913
371691371174428596179933312543641
997359982233767566893611827633931
741623294359255793166376996632673
953487374655257321542791584343847
963879549746749624533521948238521
333932547332199878726127317936659
361666241144596574112582368274179
112199396834986925126788934812279
946542664783757169169528168112287
118399953131963945445935464647419
164644185832872584347797196958593
372913626341135735657626335548413
796881575525181715111543418185319
739199791939999391111999773371973
```

### 通常(各列)

素数だった

```
~ $ cat 1089prime | sed 's/./& /g;s/ $//' | rs -T | sed 's/ //g' | factor
313933911199191397377391313377919: 313933911199191397377391313377919
144457451155418974435273415644511: 144457451155418974435273415644511
373343147248959562455446396175587: 373343147248959562455446396175587
957694881733651744345824316829173: 957694881733651744345824316829173
929977732932537681294949332135431: 929977732932537681294949332135431
197578179724617953194564784314879: 197578179724617953194564784314879
387936985871971652237143436624569: 387936985871971652237143436624569
995772882652788385922162433421727: 995772882652788385922162433421727
954853592869194479246479921642469: 954853592869194479246479921642469
392996718182433456775437469115539: 392996718182433456775437469115539
748434919157997896929918955338199: 748434919157997896929918955338199
119651475819968485294658332187299: 119651475819968485294658332187299
198662984712184987144198229944577: 198662984712184987144198229944577
995473338254681419765234215128947: 995473338254681419765234215128947
912439348222491618894865196354527: 912439348222491618894865196354527
155541322485133471526497511198113: 155541322485133471526497511198113
387116932747415811838712618563997: 387116932747415811838712618563997
175682922551846431323818198727961: 175682922551846431323818198727961
185879766165798115261858761429913: 185879766165798115261858761429913
371691371174428596179933312543641: 371691371174428596179933312543641
997359982233767566893611827633931: 997359982233767566893611827633931
741623294359255793166376996632673: 741623294359255793166376996632673
953487374655257321542791584343847: 953487374655257321542791584343847
963879549746749624533521948238521: 963879549746749624533521948238521
333932547332199878726127317936659: 333932547332199878726127317936659
361666241144596574112582368274179: 361666241144596574112582368274179
112199396834986925126788934812279: 112199396834986925126788934812279
946542664783757169169528168112287: 946542664783757169169528168112287
118399953131963945445935464647419: 118399953131963945445935464647419
164644185832872584347797196958593: 164644185832872584347797196958593
372913626341135735657626335548413: 372913626341135735657626335548413
796881575525181715111543418185319: 796881575525181715111543418185319
739199791939999391111999773371973: 739199791939999391111999773371973
```

### 反転(各列)

素数だった

```
~ $ cat 1089prime | sed 's/./& /g;s/ $//' | rs -T | sed 's/ //g' | rev | factor
919773313193773793191991119339313: 919773313193773793191991119339313
115446514372534479814551154754441: 115446514372534479814551154754441
785571693644554265959842741343373: 785571693644554265959842741343373
371928613428543447156337188496759: 371928613428543447156337188496759
134531233949492186735239237779929: 134531233949492186735239237779929
978413487465491359716427971875791: 978413487465491359716427971875791
965426634341732256179178589639783: 965426634341732256179178589639783
727124334261229583887256288277599: 727124334261229583887256288277599
964246129974642974491968295358459: 964246129974642974491968295358459
935511964734577654334281817699293: 935511964734577654334281817699293
991833559819929698799751919434847: 991833559819929698799751919434847
992781233856492584869918574156911: 992781233856492584869918574156911
775449922891441789481217489266891: 775449922891441789481217489266891
749821512432567914186452833374599: 749821512432567914186452833374599
725453691568498816194222843934219: 725453691568498816194222843934219
311891115794625174331584223145551: 311891115794625174331584223145551
799365816217838118514747239611783: 799365816217838118514747239611783
169727891818323134648155229286571: 169727891818323134648155229286571
319924167858162511897561667978581: 319924167858162511897561667978581
146345213339971695824471173196173: 146345213339971695824471173196173
139336728116398665767332289953799: 139336728116398665767332289953799
376236699673661397552953492326147: 376236699673661397552953492326147
748343485197245123752556473784359: 748343485197245123752556473784359
125832849125335426947647945978369: 125832849125335426947647945978369
956639713721627878991233745239333: 956639713721627878991233745239333
971472863285211475695441142666163: 971472863285211475695441142666163
972218439887621529689438693991211: 972218439887621529689438693991211
782211861825961961757387466245649: 782211861825961961757387466245649
914746464539544549369131359993811: 914746464539544549369131359993811
395859691797743485278238581446461: 395859691797743485278238581446461
314845533626756537531143626319273: 314845533626756537531143626319273
913581814345111517181525575188697: 913581814345111517181525575188697
379173377999111193999939197991937: 379173377999111193999939197991937
```

## 対角線

### 左上から右下

素数だった

```
~ $ cat 1089prime | awk -vFS= '{printf $NR}' | factor
343678982159181411273391364148413: 343678982159181411273391364148413
```

### 左上から右下（反転）

素数だった

```
~ $ cat 1089prime | awk -vFS= '{printf $NR}' | rev | factor
314841463193372114181951289876343: 314841463193372114181951289876343
```

### 右上から左下

素数だった

```
~ $ cat 1089prime | awk -vFS= '{printf $(NF-(NR-1))}' | factor
792692347759728411864617936339519: 792692347759728411864617936339519
```

### 右上から左下（反転）

素数だった

```
~ $ cat 1089prime | awk -vFS= '{printf $(NF-(NR-1))}' | rev | factor
915933639716468114827957743296297: 915933639716468114827957743296297
```

## おまけ

1089桁全体は、反転しても素数にはならない（おしい！）
素数じゃなかった

```
~ $ cat 1089prime | tr -dc 0-9 | rev |  xargs openssl prime
12D0753CBEE1428771C34BCA938C4FB237EAD4EF61F7857CBC082BE6AFC5F594263C8C05489B1B57365B872FFB4D36DE355125A25AE72E88D71A7F0DD916A7B7E1D3FCABAC572C1E280CB7F9272130E6778FEF3BD111718EC1827DC3804462BF82733225307B1963862AFE6E340915773F356EFD06588D05EC97F6597D169E8323089FFC421FAD818CC8E65C171CCAB2BE698E607483F67FF8622F8E89EB6B3A0D078C44089553FC4B7FF17E507E539E5F2BDEE16AF093D735584B70311F794F97EF6739BFF466C6E990DA10DC148A34511CB7FA7AF35D1EFA6B228FC23CBF9AA69BD57C55D44E57F16A9B6263E2A97CE9097E762F95BF0F068558BE2F66B31D06C9BA98EE65CDA80116ED55DE30CFC9259DD27C166ECC0738F00205AB5755E9CA987558BEE1C84EDB0D9B825CAE3B709A63B48F334DC77DCD29858FB776E47B44B9E94E0692E5A939EB9D7CA9822EFB28982024BBC6F37A8CE77545E926C1BCCE4CAB918B87C9CD84D8BA4F0CF5A34B9E4B2B0A187AD7D37511276F7C8A62221FD28538D066F4213BA022120D9898EE17DAF1E2AE489707D3311F5FE4A4C34299A8802448189C0DB204AA6CDCA579E6ACD7C3C78B567C127DC387653F06CFC158225F6D1
is not prime
```

## 感想
まだまだ人類は見つけていないだけで、こういう奇跡的な数ってもっと存在するんでしょうね。ウキウキしますね。