Skip to content

Instantly share code, notes, and snippets.

q,r,t,k,n = 1,0,1,1,2,3
loop do
if 2*q+r-t < n*t
print n
q,r,t,k,n = 10*q,10*(r-n*t),t,k,(10*(q+r))/t-10*n
else
r,t,k,n = (q+r)*k, t*k, k+1, (q+r*k)/(t*k)
end
end
import Data.Char
e = map (intToDigit . fromInteger) $ stream next safe prod cons init lfts where
init = unit
lfts = [(1, k, 0, k) | k<-[1..]]
next z = floor (extr z 1)
safe z n = (n == floor (extr z 2))
prod z n = comp (10, -10*n, 0, 1) z
cons z z' = comp z z'
type LFT = (Integer, Integer, Integer, Integer)
e = g(1,0,1,1,2,3) where
g(q,r,t,k,n,l) =
if 2*q+r-t<n*t
then n : g(10*q,10*(r-n*t),t,k,div(10*(q+r))t-10*n,l)
else g(q,(q+r)*k,t*k,k+1,div(q+r*k)(t*k),l+2)