2013-08-23 15 views
5

Project Eulerで質問1を練習していますが、問題を解決するために書いた関数が長すぎます。関数の実行が遅すぎる

実際の方法そのものではなくコード化しているからです。
この機能を10回または15回繰り返して実行すると、即座に回答が吐き出されますが、20までジャンプするとすぐに何も表示されません。
1000回の繰り返しが必要な場合は、明らかに大きな問題です。

def pe1(n): 
    counter = 1 
    total = 0 
    while counter < n: 
     if counter%3==0: 
      total=total+counter 
     if counter%5==0: 
      if counter%3==0: 
       continue 
      total=total+counter 
     if counter % 25 == 0: 
      print (total) 
     counter=counter+1 
    return (total) 

答えて

2

counterは15に等しく、最初にその時に起こるであろう、どこcounter%5==0counter%3==0を何が起こるかを見ればケースを考えてみましょう。

counterという値に対しては何も起こりません。具体的には、counter=counter+1という行は実行されません。

6

counterが15に達すると、ループは無限に戻りますcontinue - 常に2番目のifステートメントのケースをヒットします。

続行する前にcounter = counter + 1行を移動する必要があります。より良い方法として、for counter in range(1,n)などを使用してください。

1

あなたは、テーブル駆動型を使用することができます

if ... 
elif ... 
elif ... 
else ... 
0

を使用することを検討して、このような罠を避けるために。このような。

counter_map = {3:fun1, 5:func2, 25:fun3} # key is remainder.Of course,fun can be replaced with lambda. 
関連する問題