Python:如何找到连续素数之间的平均差距?

时间:2017-03-19 21:08:43

标签: python average primes

这是我的代码:

primeList =[]

for x in range(2, 30):
    isPrime = True
    for y in range (2, int(x**0.5)+1):
        if x % y == 0:
            isPrime = False
            break
    if isPrime:
        primeList.append(x)

print(primeList)


total_diff = 0
for a, b in zip(primeList, primeList[1:]):
    total_diff += abs(b - a)

ave_diff = total_diff / (len(primeList)-1)

print(ave_diff)

有人可以帮我弄清楚我哪里出错吗?我使用范围(2,30)作为示例,因为此代码可以使用任何数字。我不明白为什么我会得到结果,但我知道这总是错的。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您的代码是正确的,因为输出为3,实际上平均差异为3.但是,由于差异总是正的,您可以这样做:

ave_diff=float(primeList[-1]-primeList[0])/(len(primeList)-1)

因为差异相互抵消(即(b-a)+(c-b)=c-a)。

答案 1 :(得分:0)

不是答案,更多是改进。由于2是唯一的偶数素数,你可以通过分别处理2并且仅处理从那时起处理的奇数来将测试质数的工作减半:

primeList =[2]

for x in range(3, 30, 2):
    isPrime = True
    for y in range (3, int(x**0.5)+1, 2):
        if x % y == 0:
            isPrime = False
            break
    if isPrime:
        primeList.append(x)

print(primeList)

为了提高速度,请使用Eratosthenes筛选。