21 lines
662 B
Text
21 lines
662 B
Text
main :: [sys_message]
|
|
main = [Stdout (table 5 10 nums), Stdout countmsg]
|
|
where nums = filter additive_prime [1..500]
|
|
countmsg = "Found " ++ show (#nums) ++ " additive primes < 500\n"
|
|
|
|
table :: num->num->[num]->[char]
|
|
table w c ls = lay [concat (map (rjustify w . show) l) | l <- split c ls]
|
|
|
|
split :: num->[*]->[[*]]
|
|
split n ls = [ls], if #ls < n
|
|
= take n ls:split n (drop n ls), otherwise
|
|
|
|
additive_prime :: num->bool
|
|
additive_prime n = prime (dsum n) & prime n
|
|
|
|
dsum :: num->num
|
|
dsum n = n, if n<10
|
|
= n mod 10 + dsum (n div 10), otherwise
|
|
|
|
prime :: num->bool
|
|
prime n = n>=2 & #[d | d<-[2..entier (sqrt n)]; n mod d=0] = 0
|