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))
运行这个程序,最后我得到了一个无。我不知道有什么问题,请帮忙
答案 0 :(得分:4)
brun
没有return语句,因此默认情况下返回None
。因此print(brun(10000))
打印None
。
修改:如下所述,您可能希望在return combs
的末尾添加brun
语句。但是,combs
是一个包含N(N-1)/2
元素的列表,因此我怀疑您是否要打印整个内容。您可能想要打印类似
print(brun(10000)[-1])
将打印combs
的最后一个元素。
答案 1 :(得分:2)
@Bill正确回答了你的问题。但是,让我花点时间建议一个更好的算法;它被称为Eratosthenes的筛子,是两千多年前希腊数学家发明的。我们的想法是首先将所有小于 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
然后,您可以通过说sum(primes(n))
来计算小于 n 的素数之和。如果您对使用素数进行编程感兴趣,我会在我的博客上谦虚地推荐this essay。