Ich habe ein Problem mit der Aufgabe zur Erstellung eines Primzahlengenerators. Ich habe jetzt schon ein paar Hürden überwunden, wie z.B. das "time limit exceeded", welches ich durch Psyco umgangen habe (ja, ich weiss, ein besserer algorithmus hätte das auch getan, vielleicht kann mir da ja auch jemand helfen, weil ich echt nicht weiter weiss), dann wurde ein NZEC-Fehler ausgegeben, welche ich mit einer exception abgefangen habe.
Jetzt habe ich genau die Ausgabe welche gewünscht ist (Habe zur Übersicht Input und Output mit reingenommen), und ansich wird auch alles richtig berechnet. Ich bekomme dennoch eine "wrong answer"-Fehlermeldung ausgegeben.
Weiss vielleicht einer von euch was ich falsch gemacht habe? Ich weiss das der Code wahrscheinlich total aufgeblasen ist, muss mir noch guten Programmierstil aneignen. Über Verbesserungsvorschläge würde ich mich auch sehr freuen.
Problem ist folgendes: https://www.spoj.pl/problems/PRIME1/
Code: Alles auswählen
from math import sqrt
import psyco
psyco.full()
def sieve(m,n):
sieve = range(n+1)
sieve[1] = 0
max_divider = int(sqrt(n))
curr_divider = 2
while curr_divider <= max_divider:
lst_index = curr_divider**2
while lst_index <= n:
sieve[lst_index] = 0
lst_index += curr_divider
curr_divider += 1
while sieve[curr_divider] == 0:
curr_divider += 1
for i in range(m,len(sieve)):
if sieve[i] != 0:
print sieve[i]
def ask(x):
for i in range(0,x):
fehler = 1
while fehler == 1:
t = raw_input()
y = t.split()
if (int(y[1])-int(y[0])) <= 100000 and int(y[1]) <= 1000000000 and int(y[0]) <= int(y[1]) and int(y[0]) >= 1:
fehler = 0
test.append(y)
return test
print 'Input:'
fehler = 1
while fehler == 1:
y = int(raw_input())
if y <= 10:
fehler = 0
test = []
for i in range(0,y):
t = ask(y)
print ''
print 'Output:'
for i in range(0,len(t)):
m = test[i][0]
n = test[i][1]
try:
m = test[i][0]
n = test[i][1]
sieve(int(m),int(n))
if i < len(t)-1:
print ''
except:
pass