>>>isperfect = lambda n: n == sum(x for x inrange(1,n//2+1) ifnot n%x)>>>[n for n inrange(1, 10000) if isperfect(n)]
[6, 28, 496, 8128]
(from https://oeis.org/A000396 i see the next perfect number after 8128 is 33550336 which is too big for me to wait for the naive approach above to test…)
you’ve got an extra zero in there, and you forgot the 1, but the rest of your divisors match my crude brute-force approach:
>>> n=31521281 >>> d = [ x for x in range(1,n//2+1) if not n%x ] >>> d [1, 11, 17, 59, 187, 649, 1003, 2857, 11033, 31427, 48569, 168563, 534259, 1854193, 2865571] >>> yours=list(map(int,"11+17+59+2857+11033+534259+1854193+2865571+168563+48569+10003+31427+649+187".split("+"))) >>> set(yours) - set(d) {10003} >>> set(d) - set(yours) {1, 1003} >>> sum(d) 5518399
same conclusion though: 5518399 also ≠ 31521281
bonus nonsense
>>> isperfect = lambda n: n == sum(x for x in range(1,n//2+1) if not n%x) >>> [n for n in range(1, 10000) if isperfect(n)] [6, 28, 496, 8128]
(from https://oeis.org/A000396 i see the next perfect number after 8128 is 33550336 which is too big for me to wait for the naive approach above to test…)