Roiban1344's Logbook

メルセンヌ数 - ネイピア数

メルセンヌ数

書いた!

128ビット符号付き整数の最大値は素数 - Rustで任意精度整数演算

かなり読み物的な記事にはなってしまった。

リュカテストは任意精度整数が扱えることのご利益が分かりやすく、かつ実装が難しくない例として非常にちょうど良い。階乗計算やフィボナッチ数(それぞれ21!21!, F94F_{94}u64からオーバーフロー)を計算するのはそれほど面白くはない。素因数分解や楕円曲線は実装が難しい。その点、プリミティブ型の値であるi128::MAXが素数であることを確かめるための効率の良い方法を実装するのに任意精度整数が必要になる、というのは自明ではなくて面白いと思う。

e

ツイッターで見たやつ

おもしろ~~

このリプライの近似式は、f(x):=(1+x)1/xf(x):=(1+x)^{1/x} をえいっとテイラー展開して

1ef(x)=1x2+11x2247x316+2447x45760959x52304\frac{1}{e}f(x) = 1-\frac{x}{2}+\frac{11 x^2}{24}-\frac{7 x^3}{16}+\frac{2447 x^4}{5760}-\frac{959x^5}{2304}\cdots

から得られる。

さて、もっと先まで係数を計算させると(Maximaを利用)、右辺の係数は第10項で

29128857391735746457600.3959089043529769,\frac{29128857391}{73574645760} \simeq 0.3959089043529769,

第50項で

3480399199736560421508013355236918240759787762455199447618125657144667349097427223298478119290390434680465366621975207171363907146581884836532247815821119997670934446080000000000000.3746235665989279\frac{348039919973656042150801335523691824075978776245519944761812565714466734909742722329847811}{929039043468046536662197520717136390714658188483653224781582111999767093444608000000000000} \simeq 0.3746235665989279

という怪しげな値になる。たぶん、

e10.3678794411714423e^{-1} \simeq 0.3678794411714423

に漸近する。というか、f(x)f(x) のテイラー展開の係数が11に近付く。もっと先まで計算させるには、

1ef(x)=exp(x2)exp(x23)exp(x34)exp(x45)\frac{1}{e}f(x) = \exp\left(\frac{-x}{2}\right)\exp\left(\frac{x^2}{3}\right)\exp\left(\frac{-x^3}{4}\right)\exp\left(\frac{x^4}{5}\right)\cdots

か、f(x)f(x)の対数微分で漸化式を得るかすれば係数は求められるはず。Maximaのtaylorだとこれ以上やらせるのはきつい。せっかくなのでRustを使って漸近する様子を見てみたい。

しかしテイラー展開の係数の漸近形はどうすれば求められるんだろう?

メルセンヌ・ツイスタ

Mersenne Twister: A random number generator (since 1997/10)

理解したい……言うだけならタダ。

その前に二次篩法でメルセンヌ数の素因数分解しないと。中核で疎行列を使っているので、そのあたりも調べることになる。