80
calc v d = calc' 1 where calc' x | v < (d * 10 + x) * x = x - 1 | otherwise = calc' (x + 1) root v d | v == 0 = [] | otherwise = x : root ((v - p) * 100) (d * 10 + x * 2) where x = calc v d p = (d * 10 + x) * x root n 0 でsqrt(n)の無限リストが生成される
適当だけどこんな方法も…。変数名も適当…。calcは2分探索ぽくすれば早くなるかも知れないけど小数部ではN<10なのであんまり意味無いかもと思って逐次探索のまま。