Un nombre parfait est un nombre dont la vraie fraction fractionnaire de ce nombre correspond à elle-même. Par exemple, la vraie somme fractionnaire de 28 est 1 + 2 + 4 + 7 + 14 = 28. Puisqu'il y en a, 28 est un nombre parfait.
Si la somme des vraies fractions est inférieure à ce nombre, on l'appelle un nombre de pénurie, et si la somme des vraies fractions est supérieure à ce nombre, on l'appelle un nombre en excès.
Puisque 12 est 1 + 2 + 3 + 4 + 6 = 16, c'est le nombre minimum en excès, donc le nombre minimum qui peut être écrit par la somme des deux nombres en excès est 24. À partir de 28123 par analyse mathématique. On sait que tout grand entier peut être écrit comme la somme de deux nombres en excès Nous savons que le nombre maximum qui ne peut être représenté par la somme de deux nombres en excès est inférieur à cette limite supérieure, mais réduisons cette limite. Je n'ai pas pu.
Trouvez la somme des entiers positifs qui ne peuvent pas être écrits comme la somme de deux nombres en excès. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2023
Pratique de la notation d'inclusion de dictionnaire.
La validation des éléments à l'aide d'ensembles et de dictionnaires (O (1)) est plus rapide que la recherche de séquences (O (n)). Lorsque vous recherchez a dans b, b doit être des ensembles ou des dictionnaires, et non des listes ou des taples.
# -*- 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 #+C'est pénible de calculer 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()
Même ainsi, il est trop tard. Cependant, je n'ai pas l'intention de l'améliorer.
Recommended Posts