def isPrime(m): if m in [2, 3, 5, 7, 11, 13, 17, 19]: return True if m < 20 or m%2 == 0: return False d = 3 while d*d <= m: if m%d == 0: return False d += 2 return True def factorize(m): if m == 0: return [] res = [] if m < 0: res.append((-1, 1)) m = (-m) assert m > 0 d = 2 while d*d <= m: if m%d == 0: e = 1 m //= d while m%d == 0: e += 1 m //= d res.append((d, e)) d += 1 if m > 1: res.append((m, 1)) return res def dividers(m): return [ d for d in range(1, m//2 + 1) if m%d == 0 ] def isPerfect(m): return sum(dividers(m)) == m