Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,41 @@
|
|||
divisors :: (Integral a) => a -> [a]
|
||||
divisors n = filter ((0 ==) . (n `mod`)) [1 .. (n `div` 2)]
|
||||
|
||||
data Class
|
||||
= Terminating
|
||||
| Perfect
|
||||
| Amicable
|
||||
| Sociable
|
||||
| Aspiring
|
||||
| Cyclic
|
||||
| Nonterminating
|
||||
deriving (Show)
|
||||
|
||||
aliquot :: (Integral a) => a -> [a]
|
||||
aliquot 0 = [0]
|
||||
aliquot n = n : (aliquot $ sum $ divisors n)
|
||||
|
||||
classify :: (Num a, Eq a) => [a] -> Class
|
||||
classify [] = Nonterminating
|
||||
classify [0] = Terminating
|
||||
classify [_] = Nonterminating
|
||||
classify [a,b]
|
||||
| a == b = Perfect
|
||||
| b == 0 = Terminating
|
||||
| otherwise = Nonterminating
|
||||
classify x@(a:b:c:_)
|
||||
| a == b = Perfect
|
||||
| a == c = Amicable
|
||||
| a `elem` (drop 1 x) = Sociable
|
||||
| otherwise =
|
||||
case classify (drop 1 x) of
|
||||
Perfect -> Aspiring
|
||||
Amicable -> Cyclic
|
||||
Sociable -> Cyclic
|
||||
d -> d
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
let cls n = let ali = take 16 $ aliquot n in (classify ali, ali)
|
||||
mapM_ (print . cls) $ [1..10] ++
|
||||
[11, 12, 28, 496, 220, 1184, 12496, 1264460, 790, 909, 562, 1064, 1488]
|
||||
Loading…
Add table
Add a link
Reference in a new issue