21 lines
630 B
Text
21 lines
630 B
Text
main :: [sys_message]
|
|
main = map (Stdout . showSuperD) [2..6]
|
|
where showSuperD d = "First 10 super-" ++ show d ++ " numbers:\n"
|
|
++ show (take 10 (superd d)) ++ "\n\n"
|
|
|
|
superd :: num->[num]
|
|
superd d = filter (issuperd d) [1..]
|
|
|
|
issuperd :: num->num->bool
|
|
issuperd d n = consecutive d d (digits (n^d * d))
|
|
|
|
digits :: num->[num]
|
|
digits = map (mod 10) . takewhile (~= 0) . iterate (div 10)
|
|
|
|
consecutive :: num->*->[*]->bool
|
|
consecutive
|
|
= c 0
|
|
where c n n x xs = True
|
|
c i n x [] = False
|
|
c i n x (x:xs) = c (i+1) n x xs
|
|
c i n x (y:xs) = c 0 n x xs
|