#I reduced it a lot def reduce(f,l,default=0): acc=0; for i in l:acc=f(acc,i) return acc def primes(limit): nums=list(range(2,limit+1));num=2;n = 0 while num < limit: for i in range(num,limit,num): try: if i!=num:nums.remove(i) except: pass n+=1;num=nums[n] return nums def divisors(num,inclusive=True):return list(filter(lambda x: num%x==0,range(1,num+(1 if inclusive else 0)))) def dist_to_divisors_sum(num,inclusive=False):return reduce(lambda acc,v:acc+v,divisors(num,inclusive),0)-num def is_perfect(num):return dist_to_divisors_sum(num)==0 def is_almost_perfect(num):return abs(dist_to_divisors_sum(num))==1 pr = primes;do = divisors;dds = dist_to_divisors_sum;ip = is_perfect;ap = is_almost_perfect