Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
10
Task/Amicable-pairs/Haskell/amicable-pairs-1.hs
Normal file
10
Task/Amicable-pairs/Haskell/amicable-pairs-1.hs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
divisors :: (Integral a) => a -> [a]
|
||||
divisors n = filter ((0 ==) . (n `mod`)) [1 .. (n `div` 2)]
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
let range = [1 .. 20000 :: Int]
|
||||
divs = zip range $ map (sum . divisors) range
|
||||
pairs = [(n, m) | (n, nd) <- divs, (m, md) <- divs,
|
||||
n < m, nd == m, md == n]
|
||||
print pairs
|
||||
21
Task/Amicable-pairs/Haskell/amicable-pairs-2.hs
Normal file
21
Task/Amicable-pairs/Haskell/amicable-pairs-2.hs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import Data.Bool (bool)
|
||||
|
||||
amicablePairsUpTo :: Int -> [(Int, Int)]
|
||||
amicablePairsUpTo n =
|
||||
let sigma = sum . properDivisors
|
||||
in [1 .. n] >>=
|
||||
(\x ->
|
||||
let y = sigma x
|
||||
in bool [] [(x, y)] (x < y && x == sigma y))
|
||||
|
||||
properDivisors
|
||||
:: Integral a
|
||||
=> a -> [a]
|
||||
properDivisors n =
|
||||
let root = (floor . sqrt) (fromIntegral n :: Double)
|
||||
lows = filter ((0 ==) . rem n) [1 .. root]
|
||||
in init $
|
||||
lows ++ drop (bool 0 1 (root * root == n)) (reverse (quot n <$> lows))
|
||||
|
||||
main :: IO ()
|
||||
main = mapM_ print $ amicablePairsUpTo 20000
|
||||
Loading…
Add table
Add a link
Reference in a new issue