今回はEuler23問目解くわ!!!
問題はここ
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2023
この問題は正直完璧ではないわ( ^ω^)・・・
もし、いいコードやアルゴリズムがあるならコメントで教えていただきたいでそうろう
コード
import sympy
limit = 20161 #28123
exc_num = [] #過剰数
cre_num = []
result_num = []
for i in range(1,limit+1):
if sum(sympy.divisors(i)[:-1]) > i:
exc_num.append(i)
for n in range(len(exc_num)-1):
for m in range(n,len(exc_num)):
temp = exc_num[n] + exc_num[m]
if temp < limit:
if temp not in cre_num:
cre_num.append(temp)
print(exc_num)
print(cre_num)
for i in range(1,limit+1):
if i not in cre_num:
result_num.append(i)
print(result_num)
print(len(exc_num))
print(len(cre_num))
print(sum(result_num))
問題では上限が28123だったのだけどwikiで過剰数について調べていたら上限が20161と書いてあったのでそれを使いました
あと、20161だと正解するのに28123だと正解しないのがこのプログラムの不完成なところであります
私は、まずexc_numにlimitまでの過剰数をリスト化したわ!!
そしてここで二つの過剰数で出来る数をリスト化したわ
for n in range(len(exc_num)-1):
for m in range(n,len(exc_num)):
temp = exc_num[n] + exc_num[m]
if temp < limit:
if temp not in cre_num:
cre_num.append(temp)
そして最後にないものだけ足したのが答えだわ
もしここが違うやこうしたらうまくいったなどぜひぜひコメントいただきたいです。