这是我的代码:
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)作为示例,因为此代码可以使用任何数字。我不明白为什么我会得到结果,但我知道这总是错的。谢谢你的帮助。
答案 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筛选。