Integer roots: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: Added an applicative variant) |
m (→{{header|Haskell}}: Pruned out a redundant test.) |
||
Line 398: | Line 398: | ||
<lang haskell>integerRoot :: Integer -> Integer -> Integer |
<lang haskell>integerRoot :: Integer -> Integer -> Integer |
||
integerRoot n x = |
integerRoot n x = |
||
go $ iterate ((`div` n) . ((+) |
go $ iterate ((`div` n) . ((+) . (pn *) <*> (x `div`) . (^ pn))) 1 |
||
where |
where |
||
pn = pred n |
pn = pred n |
||
go (x:xs@(y:z:_)) |
go (x:xs@(y:z:_)) |
||
| x == z = min y z |
|||
| otherwise = go xs |
| otherwise = go xs |
||