Additive primes: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add SETL) |
Not a robot (talk | contribs) (Add Miranda) |
||
Line 2,483: | Line 2,483: | ||
[2, 3, 5, 7, 11, 23, 29, 41, 43, 47, 61, 67, 83, 89, 101, 113, 131, 137, 139, 151, 157, 173, 179, 191, 193, 197, 199, 223, 227, 229, 241, 263, 269, 281, 283, 311, 313, 317, 331, 337, 353, 359, 373, 379, 397, 401, 409, 421, 443, 449, 461, 463, 467, 487] |
[2, 3, 5, 7, 11, 23, 29, 41, 43, 47, 61, 67, 83, 89, 101, 113, 131, 137, 139, 151, 157, 173, 179, 191, 193, 197, 199, 223, 227, 229, 241, 263, 269, 281, 283, 311, 313, 317, 331, 337, 353, 359, 373, 379, 397, 401, 409, 421, 443, 449, 461, 463, 467, 487] |
||
</pre> |
</pre> |
||
=={{header|Miranda}}== |
|||
<syntaxhighlight lang="miranda">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</syntaxhighlight> |
|||
{{out}} |
|||
<pre> 2 3 5 7 11 23 29 41 43 47 |
|||
61 67 83 89 101 113 131 137 139 151 |
|||
157 173 179 191 193 197 199 223 227 229 |
|||
241 263 269 281 283 311 313 317 331 337 |
|||
353 359 373 379 397 401 409 421 443 449 |
|||
461 463 467 487 |
|||
Found 54 additive primes < 500</pre> |
|||
=={{header|Modula-2}}== |
=={{header|Modula-2}}== |