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)
31521281 = 11 × 17 × 59 × 2857
11 × 17 = 187
11 × 59 = 649
11 × 2857 = 31427
17 × 59 = 10003
17 × 2857 = 48569
59 × 2857 = 168563
17 × 59 × 2857 = 2865571
11 × 59 × 2857 = 1854193
11 × 17 × 2857 = 534259
11 × 17 × 59 = 11033
11+17+59+2857+11033+534259+1854193+2865571+168563+ 48569+10003+31427+649+187=5527398≠31521281
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)
What about 2^31521281 - 1, I’m pretty sure that’s a perfect odd number