为什么我执行的阿特金筛选数量接近指定的限制?

时间:2010-03-08 02:00:54

标签: python math primes sieve-of-atkin

我对Sieve of Atkin的实现要么忽略接近极限的素数,要么忽略接近极限的复合物。虽然有些限制有效,有些却没有。对于出了什么问题,我完全感到困惑。

def AtkinSieve (limit):
results = [2,3,5]
sieve = [False]*limit
factor = int(math.sqrt(lim))
for i in range(1,factor):
    for j in range(1, factor):
        n = 4*i**2+j**2
        if (n <= lim) and (n % 12 == 1 or n % 12 == 5):
            sieve[n] = not sieve[n]
        n = 3*i**2+j**2
        if (n <= lim) and (n % 12 == 7):
            sieve[n] = not sieve[n]
        if i>j:
            n = 3*i**2-j**2
            if (n <= lim) and (n % 12 == 11):
                sieve[n] = not sieve[n]
for index in range(5,factor):
    if sieve[index]:
        for jndex in range(index**2, limit, index**2):
            sieve[jndex] = False
for index in range(7,limit):
    if sieve[index]:
        results.append(index)
return results

例如,当我生成质数达到1000的极限时,Atkin筛子错过了素数997,但包含了复合物965.但是如果我产生了5000的限制,它返回的列表是完全正确的。< / p>

0 个答案:

没有答案