2012-05-04 14 views
0
testcases = raw_input(" ") 

def isPrime(n): 
    result = True 
    if n != 0 and n != 1 and n % 2 != 0 and n % 5 != 0 and n % 7 != 0 and n % 9 != 0: 
     if n > 9: 
      for i in range(11,n): 
       if isPrime(i): 
        if n % i == 0: 
         result = False 
      return result 
     else: 
      return result 
    else: 
     return False 

for count in range(0,testcases): 
    m,n = raw_input(" ").split() 
    m = int(m) 
    n = int(n) 
    for i in range(m,n+1): 
     if isPrime(i): 
      print i 
+0

を出力します+ kを押して保存します。 –

答えて

0

数字が>= 11の場合は、isPrimeを再帰的に呼び出しています。その数が十分大きい場合、スタックオーバーフローエラーが発生します。

SPOJのプライムジェネレータの問題には、数に限りがあります。 999900000 1000000000のような多数のプログラムを実行してみてください。

2

入力に余分な空白があるため、NZECが表示されています。そのようなケースを処理するコードを設計することは難しくありません。一度に入力を取り、空白でトークン化します。私はそれをどのようにしたかを見てください。

def isPrime(n): 
    result = True 
    if n != 0 and n != 1 and n % 2 != 0 and n % 5 != 0 and n % 7 != 0 and n % 9 != 0: 
     if n > 9: 
      for i in range(11,n): 
       if isPrime(i): 
        if n % i == 0: 
         result = False 
      return result 
     else: 
      return result 
    else: 
     return False 

def main(): # Don't leave the code in the global namespace, it runs slower 
    import sys 
    tokenizedInput = map(int, sys.stdin.read().split()) # Read at once, tokenize 
    testcases = tokenizedInput[0] 
    readAt = 1 # Position to begin reading 
    for count in range(0,testcases): 
     m,n = tokenizedInput[readAt:readAt+2] # Read the tokenized input 
     for i in range(m,n+1): 
      if isPrime(i): 
       print i 
     print # You need to separate two outputs by a line 
     readAt = readAt + 2 

main() 

NZECを削除します。しかし、あなたのアルゴリズムは非効率で不正確です。

2 
1 10 
3 5 

のサンプル入力テストケースのためのあなたの変更されたコードは、今、あなたの質問の質問のコードを編集コードとCtrlキーを押しながら選択してください

3 

3 

期待出力

2 
3 
5 
7 

3 
5 
関連する問題