Warning: Some posts on this platform may contain adult material intended for mature audiences only. Viewer discretion is advised. By clicking ‘Continue’, you confirm that you are 18 years or older and consent to viewing explicit content.
>>>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…)
more bonus nonsense
>>> divisors_if_perfect = lambda n: n == sum(d:=[x for x inrange(1,n//2+1) ifnot n%x]) and d
>>> print("\n".join(f"{n:>5} == sum{tuple(d)}"for n inrange(10000) if (d:=divisors_if_perfect(n))))
6 == sum(1, 2, 3)
28 == sum(1, 2, 4, 7, 14)
496 == sum(1, 2, 4, 8, 16, 31, 62, 124, 248)
8128 == sum(1, 2, 4, 8, 16, 32, 64, 127, 254, 508, 1016, 2032, 4064)
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…)
more bonus nonsense
>>> divisors_if_perfect = lambda n: n == sum(d:=[x for x in range(1,n//2+1) if not n%x]) and d >>> print("\n".join(f"{n:>5} == sum{tuple(d)}" for n in range(10000) if (d:=divisors_if_perfect(n)))) 6 == sum(1, 2, 3) 28 == sum(1, 2, 4, 7, 14) 496 == sum(1, 2, 4, 8, 16, 31, 62, 124, 248) 8128 == sum(1, 2, 4, 8, 16, 32, 64, 127, 254, 508, 1016, 2032, 4064)