LoginSignup
1
0

More than 3 years have passed since last update.

【初心者】pythonで0から Project Euler を解いてみた23

Posted at

今回は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)

そして最後にないものだけ足したのが答えだわ
もしここが違うやこうしたらうまくいったなどぜひぜひコメントいただきたいです。

1
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0