Befunge-98 (PyFunge), 120 байт
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<
Попробуйте онлайн!
Это границы с точки зрения сроков. 10 000 цифр на моем ноутбуке занимают около 11 секунд, но я уверен, что должен быть «разумный» ПК, который мог бы делать это быстрее, чем этот.
Однако, если вы попробуете это на TIO, обратите внимание, что он ничего не вернет, пока не достигнет 60-секундного ограничения времени, так как алгоритм разработан так, чтобы продолжать работать вечно. К тому времени у вас будет намного больше 10 000 цифр.
Я использую алгоритм spigot Джереми Гиббонс, который, я думаю, такой же, как и большинство других ответов здесь. Однако обратите внимание, что это зависит от интерпретатора, имеющего ячейки памяти произвольной точности, и единственная известная мне реализация, которая поддерживает это, - это PyFunge .
объяснение
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.