piの500桁を計算する


25

以下のルールを満たし、piの最初の500桁を計算するプログラムを作成します。

  • 長さは500文字未満でなければなりません。
  • 「pi」、「math.pi」、または同様のpi定数を含めることはできません。また、piを計算するライブラリ関数を呼び出すこともできません。
  • 「3」、「1」、「4」の数字を連続して使用することはできません。
  • 最新のコンピューターでは、妥当な時間(1分未満)で実行する必要があります。

最短のプログラムが勝ちます。


数字が正しいかどうかを確認するには:eveandersson.com/pi/digits-
ネリウス

最初の500文字を超えると、500桁を超える精度で印刷できますか?
アレクサンドル

@Alexandru、私はそう思うが、私はそれが切り捨てられるのを見たいと思う。
トーマスO

@Joey PI関数を計算するライブラリ関数はありません-PI定数/関数以外のライブラリから何でも使用できると思います。
オーレル

1
HTTPライブラリを使用して「digits of pi」Webサイトをダウンロードできますか?;-)
dan04

回答:


11

Golfscript-29文字

6666,-2%{2+.2/@*\/9)499?2*+}*

後で分析を投稿します


5
これがどのように機能するか説明できますか?
トーマスO

65
「後で分析を投稿します」。(3年を待つ)....
ジャスティン

14
「後で分析を投稿します」* 6年以上待機します*
エリック・ザ・アウトゴルファー

1
@EriktheOutgolferそれを投稿するつもりだった。:P
クリストファー

1
「後で分析を投稿します」(8年間待ちます)
Jono 2906

8

Mathematica(34文字):(トリガーを使用した「不正」なし)

N[2Integrate[[1-x^2]^.5,-1,1],500]

そのため、ここで魔法を説明するために、
Integrate[function, lower, upper]「下」から「上」への曲線「関数」の下の領域を提供します。この場合、その関数はで[1-x^2]^.5、半径1の円の上半分を記述する式です。円の半径は1であるため、xの値が-1未満または1より大きい場合は存在しません。したがって、円の半分の面積を見つけています。2を掛けると、半径1の円の内側の面積が得られます。これはpiに等しくなります。


おそらく、あなたの答えに、なぜこれが機能するのかの説明を挿入する必要があります(彼らにとっては数学以外の人)。
ジャスティン14

素晴らしいアイデア。私は現在それを見るでしょう。関係する数学の基本的な説明をします。
スタックトレーサー14

たぶん、あなたはそれを短縮することができます:変更sqrt[1-x^2](1-x^2)^.5)
ジャスティン

2. Mathematicaの後に*を削除できます。
スタックトレーサー14

4

Python(83文字)

P=0
B=10**500
i=1666
while i:d=2*i+1;P=(P*i%B+(P*i/B+3*i)%d*B)/d;i-=1
print'3.%d'%P

3

PARI / GP、14

\p500
acos(-1)

2行目を次のように置き換えると、トリガーを回避できます。

gamma(.5)^2

または

(6*zeta(2))^.5

または

psi(3/4)-psi(1/4)

または

4*intnum(x=0,1,(1-x^2)^.5)

または

sumalt(k=2,(-1)^k/(2*k-3))*4

2

bc -l(22 = 5コマンドライン+ 17プログラム)

scale=500
4*a(1)

5
ルールには、「また、パイを計算するためにライブラリ関数を呼び出すことはできません」とあります。
ピーターテイラー

@Peter私が推測する問題は、「ライブラリ関数」は常に明確に定義された用語ではなく、「Piを計算する」と言うと悪化するだけです。たとえば、Sqrt()アレクサンドルの答え。
ベリサリウス博士11

アタンは1/4パイを計算するので、これは不正行為だと思いますが、それでも面白い解決策です。
トーマスO

1
@Thomas O:これが不正行為である場合、制限はどこにありますか?
JB


1

Python3 136

Madhavaの式を使用します。

from decimal import *
D=Decimal
getcontext().prec=600
p=D(3).sqrt()*sum(D(2-k%2*4)/3**k/(2*k+1)for k in range(1100))
print(str(p)[:502])

Python3 164

この式を使用ます。

from decimal import *
D=Decimal
getcontext().prec=600
p=sum(D(1)/16**k*(D(4)/(8*k+1)-D(2)/(8*k+4)-D(1)/(8*k+5)-D(1)/(8*k+6))for k in range(411))
print(str(p)[:502])


1

パイス、21

u+/*GHhyHy^T500r^3T1Z

このアルゴリズムを使用します pi = 2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))。Golfscript回答のコメントにあります。


これは... downvoteに値するしない
ベータ崩壊

この答えは間違っています。34247779を生成します...私の知る限り、これはpiではありません。
-orlp

@orlp r最近、この答えを破る方法で操作が変更されました。をに変更する1と、0現在のPythで機能します。
-isaacg

0

公理、80バイト

digits(503);v:=1./sqrt(3);6*reduce(+,[(-1)^k*v^(2*k+1)/(2*k+1)for k in 0..2000])

参照用https://tuts4you.com/download.php?view.452 ; 6 * arctg(1 / sqrt(3))=%piへの近似であり、arctgに対してセリエ拡張を使用します。

  3.1415926535 8979323846 2643383279 5028841971 6939937510 5820974944 592307816
  4 0628620899 8628034825 3421170679 8214808651 3282306647 0938446095 505822317
  2 5359408128 4811174502 8410270193 8521105559 6446229489 5493038196 442881097
  5 6659334461 2847564823 3786783165 2712019091 4564856692 3460348610 454326648
  2 1339360726 0249141273 7245870066 0631558817 4881520920 9628292540 917153643
  6 7892590360 0113305305 4882046652 1384146951 9415116094 3305727036 575959195
  3 0921861173 8193261179 3105118548 0744623799 6274956735 1885752724 891227938
  1 8301194913 01

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.