对于SPOJ在Consecutive Animation Calls Not Working的PRIME1问题,我在python中使用以下代码得到了错误的答案。我自己在各种测试用例上测试过它,但找不到失败的测试用例。有人可以在我的代码中发现问题吗?
from math import sqrt
def sieve_1(n):
l = [True for i in xrange(int(sqrt(n)) + 1)]
m = []
for i in xrange(2, int(sqrt(n)) + 1):
if l[i] == True:
m.append(i)
for j in xrange(i, int(sqrt(n)) + 1, i): l[j] = False
#print m
return m
def sieve_2(a, b):
l = sieve_1(b)
t = a
r = [True for i in xrange(a, b + 1)]
if a == 1 : r[0] = False
for p in list(l):
if (a/p)*p != a: a = (a/p)*p + p
for i in xrange(a - t, b + 1 - t, p): r[i] = False
for i in list(l):
if i > t: r[i - t] = True
return r
def prime(a, b):
l = sieve_2(a, b)
for i in xrange(0, b + 1 - a):
if l[i] == True:
print i + a
n = int(raw_input())
for i in xrange(n):
a, b = map(int, raw_input().split())
prime(a, b)
if i != n - 1: print' '