マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

TeX で例の素数をアレする話

最大記録素数(Largest Known Prime)の記録を更新する、49 番目のメルセンヌ素数が発見されたそうである。

以下の映像をみると、この素数 274207281 − 1 の値を印刷して製本した冊子(3 分冊)が登場する。

真の TeX 芸人がこれを見たならば、次のように考えることは必然であろう。

274207281 − 1 の値を TeX で計算して組版したい。

ところが実際にこれを実装するのは極めて困難である。

TeX エンジンの“処理途中のトークン列”を記憶するバッファには容量制限があって、現在の TeX 実装では 800 万トークンが上限のようである。従って 7000 万桁の整数を展開することができない。多倍長整数を(擬似)配列として保持するとバッファの問題は回避できるが、今度は使用可能な制御綴の個数の上限(200 万程度)に引っかかってしまう。とにかく非常に困難なことは確かである。

だがしかし。

イヤな予感しかしないのは至極もっともであるが、取りあえずコンパイル(“pdftex mersenne”)してみよう。

C:\tmp>pdftex mersenne.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/W32TeX) (preloade
 format=pdftex)
 restricted \write18 enabled.
entering extended mode
(./mersenne.tex [1{c:/usr/local/share/texmf-dist/fonts/map/pdftex/updmap/pdftex
.map}] [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]
[31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45]
[46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60]
[61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75]
[76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90]
[91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104]
[105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116]
[117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128]
[129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152]
[153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164]
[165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176]
[177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188]
…………

大量にページが吐き出されている。巨大素数の値を出力しているので当然ではあるが、でもしかしアリエナイくらいに速過ぎないか?

[7374] [7375] [7376] [7377] [7378] [7379] [7380] [7381] [7382] [7383] [7384]
[7385] [7386] [7387] [7388] [7389] [7390] [7391] [7392] [7393] [7394] [7395]
[7396] [7397] [7398] [7399] [7400] [7401] [7402] [7403] [7404] [7405] [7406]
[7407] [7408] [7409] [7410] [7411] [7412] [7413] [7414] [7415] [7416] [7417]
[7418] [7419] [7420] [7421] )<c:/usr/local/share/texmf-dist/fonts/type1/public/
amsfonts/cm/cmss10.pfb><c:/usr/local/share/texmf-dist/fonts/type1/public/amsfon
ts/cm/cmssdc10.pfb><c:/usr/local/share/texmf-dist/fonts/type1/public/txr/t1xtt.
pfb>
Output written on mersenne.pdf (7422 pages, 2212316 bytes).
Transcript written on mersenne.log.

コンパイルが完了したようである。早速開いてみよう。

どうやら“表紙”がついているらしい………………ん?

……ということは……。

これはひどい…。