Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Perfect Number Checking by mortonfox
from collections import Counter
from itertools import product
from functools import reduce
from operator import mul
def prime_factors(n):
i = 2
while i * i <= n:
while n % i == 0:
yield i
n //= i
i += 1
if n > 1: yield n
def divisors(n):
factors = Counter(prime_factors(n))
powers = [[factor ** i for i in range(count + 1)] for factor, count in factors.items()]
for prime_power_combo in product(*powers):
yield reduce(mul, prime_power_combo, 1)
def is_perfect(n: int) -> bool:
return sum(divisors(n)) == 2 * n
print("Example:")
print(is_perfect(3))
# These "asserts" are used for self-checking
assert is_perfect(6) == True
assert is_perfect(2) == False
assert is_perfect(28) == True
assert is_perfect(20) == False
assert is_perfect(496) == True
assert is_perfect(30) == False
assert is_perfect(8128) == True
assert is_perfect(100) == False
assert is_perfect(500) == False
assert is_perfect(1000) == False
print("The mission is done! Click 'Check Solution' to earn rewards!")
Oct. 11, 2023
Comments: