A perfect number is a number whose true divisor sum matches itself. For example, the true divisor sum of 28 is 1 + 2 + 4 + 7 + 14 = 28. Since there is, 28 is a perfect number.
A number with a sum of true divisors less than that number is called a deficient number, and a number with a sum of true divisors greater than that number is called an abundant number.
Since 12 is 1 + 2 + 3 + 4 + 6 = 16, it is the smallest abundant number. Therefore, the minimum number that can be written by the sum of the two abundant numbers is 24. From 28123 by mathematical analysis. It is known that any large integer can be written as the sum of two abundant numbers. We know that the maximum number that cannot be represented by the sum of two abundant numbers is less than this upper limit, but we reduce this upper limit. I haven't been able to.
Find the sum of positive integers that cannot be written as the sum of two abundant numbers. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2023
Practice dictionary comprehension.
Validating elements using sets and dictionaries (O (1)) is faster than searching arrays (O (n)). When looking up a in b, b should be sets or dictionaries, not lists or tuples.
# -*- coding: utf_8 -*-
def factor_sum_seq(max):
dl = [0] + [1]*(max)
seq = range(max+1)
for i in seq[2:]:
for j in seq[i*2::i]:
dl[j] += i
return dl
def cof():
MAX = 28123+1 #+It's a pain to calculate 1
seq = range(MAX)
dl = factor_sum_seq(MAX)
abu = [i for i in seq if dl[i] > i and dl[i]<MAX]
abu2 = {i+j:True for i in abu for j in abu}
ans = 0
for i in seq:
if not (i in abu2):
ans += i
print ans
cof()
Even so, it's too late. However, I have no intention of improving it.
Recommended Posts