Perfect numbers: Difference between revisions

→‎{{header|Python}}: Added a slightly faster variant
(→‎Javascript ES6: Updated primitives)
(→‎{{header|Python}}: Added a slightly faster variant)
Line 2,140:
Functional style:
<lang python>perf = lambda n: n == sum(i for i in xrange(1, n) if n % i == 0)</lang>
 
Or, a little faster (by restricting the search space):
 
<lang python>from functools import (reduce)
from operator import (add)
from math import (sqrt)
 
 
def main():
print(filter(perfect, xrange(1, 10000)))
 
 
# perfect:: Int - > Bool
def perfect(n):
lows = filter(
lambda x: 0 == (n % x),
xrange(1, 1 + int(sqrt(n)))
)
return (1 < n) and (n == reduce(
add,
lows + concatMap(
lambda x: (
lambda y=n / x: [y] if x != y else []
)()
)(lows), 0) / 2)
 
 
# GENERIC -----------------------------------------
 
# concatMap :: (a -> [b]) -> [a] -> [b]
def concatMap(f):
return lambda xs: (
reduce(add, map(f, xs), [])
)
 
 
main()</lang>
{{Out}}
<pre>[6, 28, 496, 8128]</pre>
 
=={{header|R}}==
9,655

edits