在python中得到了SPOJ prime1错误答案

时间:2015-09-29 10:38:19

标签: python

对于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' '

0 个答案:

没有答案