LINUX.ORG.RU

Сообщения garmonbozia

 

[haskell] [projecteuler] мемоизация

Форум — Development

Есть задача с PE

Написал решение в лоб, для 1000 работающее, для 10^7 - нет.

main :: IO( )
main = print $ problem_92 1000

problem_92 :: Int -> Int
problem_92 n = n - (length $ filter ( ==1) $ map last_ [1..n])

next_ :: Int -> Int
next_ n | (n >= 10) = (next_ ( n `div` 10 )) + (n `mod` 10)^2
        | otherwise = n^2

last_ :: Int -> Int
last_ n  = until (\x -> x == 89 || x == 1) next_ n

Нагуглил своего рода оптимизацию http://blog.dreamshire.com/2011/07/19/project-euler-problem-92-solution/, суть которой сводится к вычислению определённого количества значений функции и последующему использованию этих величин.

Вопрос. Как мемоизировать первые 567 значений функции last?

 

garmonbozia
()

RSS подписка на новые темы