0
def is_divisible(num,prime=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199]):
    for j in prime:
        if (num % j) == 0:
            return True
    return False

第一部分

def find_primes(N):
    prime = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199]
    primes = []
    n = range(2,N+1)
    for num in n:
        if is_divisible(num) is False:
            primes.append(num)
    return(prime+primes)

第二部分

def brun(N):
    list = find_primes(N-1)
    list2 = find_primes(N)
    combs = []
    for x in list:
        for y in list2:
            if x - y ==2:
                combs.append((1/x)+(1/y))

print(brun(10000))

运行这个程序,最后我没有。我不知道是什么问题,请帮忙

4

2 回答 2

4

brun没有 return 语句,所以默认情况下它返回None. 所以print(brun(10000))打印None

编辑:如下所述,您可能希望return combsbrun. 但是,combs它是一个包含元素的列表N(N-1)/2,所以我怀疑你想要打印整个东西。您可能想要打印类似的东西

print(brun(10000)[-1])

这将打印combs.

于 2013-10-22T17:09:17.720 回答
2

@Bill 正确回答了您的问题。但是让我花点时间提出一个更好的算法;它被称为埃拉托色尼筛,是两千多年前一位希腊数学家发明的。这个想法是最初将所有小于n的数字标记为可能的素数,然后对于每个素数,依次将其所有倍数标记为非素数,边走边收集素数:

def primes(n):
    sieve, ps = [True] * n, []
    for p in xrange(2, n):
        if sieve[p]:
            ps.append(p)
            for i in xrange(p*p, n, p):
                sieve[i] = False
    return ps

然后你可以通过说来计算小于nsum(primes(n))的素数之和。如果你对使用素数编程感兴趣,我在我的博客上谦虚地推荐这篇文章。

于 2013-10-22T17:27:00.323 回答