Befunge-98 (PyFunge), 120 byte
cf*10p'<20p11>00p1+:30p:::*+39**6+:30g39**c-00g*10gv
>:2*1-*00g*a*^
^:p02*g02p01*a*-*g02\+g01*g00-2*5g03,+*86:/*5g02+*5<
Hãy thử trực tuyến!
Đây là đường biên giới về mặt thời gian. 10.000 chữ số mất khoảng 11 giây trên máy tính xách tay của tôi, nhưng tôi chắc chắn phải có một PC "hợp lý" có thể làm điều đó nhanh hơn thế.
Tuy nhiên, nếu bạn đang dùng thử trên TIO, lưu ý rằng nó sẽ không trả lại bất cứ thứ gì cho đến khi đạt đến giới hạn thời gian 60 giây, vì thuật toán được thiết kế để tiếp tục tồn tại. Vào thời điểm đó, bạn sẽ có hơn 10.000 chữ số.
Tôi đang sử dụng thuật toán spigot Jeremy Gibbons, mà tôi nghĩ là giống như hầu hết các câu trả lời khác ở đây. Tuy nhiên, lưu ý rằng điều này phụ thuộc vào trình thông dịch có các ô nhớ chính xác tùy ý và cách thực hiện duy nhất tôi biết về sự hỗ trợ đó là PyFunge .
Giải trình
cf*10p Initialise r to 180.
'<20p Initialise t to 60.
11 Initialise i and q on the stack to 1.
> Start of the main loop.
00p Save the current value of q in memory.
1+:30p Increment i and save a copy in memory.
:::*+39**6+ Calculate u = 27*(i*i+i)+6.
: Make a duplicate, since we'll need two copies later.
30g39**c-00g*10gv Calculate y = (q*(27*i-12)+5*r)/(5*t).
/*5g02+*5<
,+*86: Convert y to a character so we can output it.
*a*-*g02\+g01*g00-2*5g03 Calculate r = 10*u*(q*(i*5-2)+r-y*t)
p01 Save the updated r.
*g02 Calculate t = t*u
p02 Save the updated t.
>:2*1-*00g*a* Calculate q = 10*q*i*(i*2-1).
^:
^ Return to the start of the main loop.