Perfect numbers: Difference between revisions

→‎{{header|Python}}: (removed for repair :-)
(→‎{{header|Python}}: added a faster variant)
(→‎{{header|Python}}: (removed for repair :-))
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, pruning back the search space for significantly more speed:
 
<lang python>from math import (sqrt)
from functools import (reduce)
from operator import (add)
 
 
# perfect :: Int -> Bool
def perfect(n):
lows = filter(lambda x: 0 == (n % x), xrange(1, int(sqrt(n))))
return n == reduce(
add, lows + map(lambda x: n / x, lows), 0
) / 2
 
 
# main :: IO ()
def main():
print (filter(perfect, xrange(1, 10000)))
 
 
main()</lang>
{{Out}}
<pre>[28, 30, 496, 8128]</pre>
 
=={{header|R}}==
9,655

edits