2017-11-15 8 views
0

私はPythonでコーディングすることを学んでおり、Project Eulerを使って問題を試してみることを本当に楽しんでいます。私は600851475143の最大の素因数を見つけるように頼んでいる問題#3にいる。私はこれを行うために以下のコードを書いており、540995までテストされた小さい値に対してはうまくいくが、「捕捉されていないシグナル#9」とは何ですか? TextMate、Python、MacOS

Program terminated by uncaught signal #9 after 50.95 seconds.

私はOS 10.12を実行しているMac上のPython 2.7.13でTextMateの上でこれを書いています:600851475143は、私はエラーを取得します。 Googleはこれに対する解決策を見つけるのを助けてくれませんでした。私はどんな洞察にも感謝します。ここで

は、私が実行していたコードです:

n = 600851475143 
fList = [] 
pList = [] 

# factor n starting with largest factor 
for i in range(n-2, 2, -2): 
    # if prime factor list is empty 
    if len(pList) == 0: 
     if n % i == 0: 
      factor = i 
      # as a factor is found, test for primality 
      for k in range(factor-2, 2, -2): 
       if factor % k == 0: 
        if factor not in fList: 
         fList.append(factor) 
      if factor not in fList: 
       pList.append(factor) 
print(pList) 

はあなたの洞察力をありがとう!

+0

わからないにアプローチする方法をここで言われています。しかし、あなたのコードは非常に非常に長い時間実行されます。 forループは約3,000億のループを実行します。 –

答えて

1

メモリ不足です。したがって、あなたの解決策は540995まで動作します。これは600851475143に比べて比較的少数です。アルゴリズムの実行時間がO(n)^2になるようにネストされたループを実行していることを覚えておいてください。別の言葉では、あなたのループは非常に長い回数実行されています。あなたはアルゴリズムの複雑さhereについてもっと知ることができます。それは私が問題に

n = 600851475143 
i = 2 
while i * i < n: 
    while n % i == 0: 
     n = n/i 
    i = i + 1 
print n 

役立ちます希望と幸運:)(それがSIGKILLでの* nixの下で)OSX手段にどのような信号9

関連する問題