Eine perfekte Zahl ist eine Zahl, deren wahre Bruchsumme dieser Zahl mit sich selbst übereinstimmt. Beispielsweise ist die wahre Bruchsumme von 28 1 + 2 + 4 + 7 + 14 = 28. Da es gibt, ist 28 eine perfekte Zahl.
Wenn die Summe der wahren Brüche kleiner als diese Zahl ist, wird sie als Mangelzahl bezeichnet, und wenn die Summe der wahren Brüche größer als diese Zahl ist, wird sie als Überzahl bezeichnet.
Da 12 1 + 2 + 3 + 4 + 6 = 16 ist, ist dies die minimale Überzahl. Daher ist die minimale Zahl, die durch die Summe der beiden Überschusszahlen geschrieben werden kann, 24. Von 28123 durch mathematische Analyse. Es ist bekannt, dass jede große Ganzzahl als Summe zweier überschüssiger Zahlen geschrieben werden kann. Wir wissen, dass die maximale Zahl, die nicht durch die Summe zweier überschüssiger Zahlen dargestellt werden kann, kleiner als diese Obergrenze ist, aber diese Obergrenze reduzieren. Ich habe es nicht geschafft.
Suchen Sie die Summe positiver Ganzzahlen, die nicht als Summe zweier überschüssiger Zahlen geschrieben werden können. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2023
Praxis der Wörterbucheinschlussnotation.
Die Validierung von Elementen mithilfe von Mengen und Wörterbüchern (O (1)) ist schneller als die Suche nach Sequenzen (O (n)). Beim Nachschlagen von a in b sollte b Mengen oder Wörterbücher sein, keine Listen oder 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 #+Es ist ein Schmerz, 1 zu berechnen
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()
Trotzdem ist es zu spät. Ich habe jedoch nicht die Absicht, es zu verbessern.
Recommended Posts