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

2021-06-13 12:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码:

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条回答
网友
1楼 ·

不是答案,更多的是进步。因为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)

为了进一步提高速度,可以使用埃拉托斯特尼筛。你知道吗

网友
2楼 ·

您的代码是正确的,因为输出是3,实际上平均差是3。但是,由于差异总是正的,您可以简单地执行以下操作:

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

因为这些差异相互抵消(即(b-a)+(c-b)=c-a)。你知道吗

相关问题