2017-03-19 1 views
0

は私のコードです: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)を例として使用しました。なぜ結果が出ているのか分かりませんが、いつも間違っていることが分かります。ご協力ありがとうございました。出力は3であるよう

+0

あなたはどんな結果を得ていますか、なぜそれが間違っていると思いますか? –

+0

あなたの出力を提供し、出力を期待してください。私が得ている出力はまったく正しいです。あなたはPython 2で何かチャンスですか? –

+0

これは悪い例だったと思います。範囲(2,20)を使用すると、平均差は17/7になるはずですが、2になります。それは最も近い整数に丸められているからですか?もしそうなら、どうすれば丸めないのですか? – DOM

答えて

2

あなたのコードは、正しく、差は常に正であるため、実際の平均差が、しかし3である、あなたは、単に行うことができます:

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

違いが相殺するので(すなわち、(b-a)+(c-b)=c-a)。

+1

あまり良い質問ではない非常に良い答え。 –

0

これ以上の改善点はありません。エラトステネスのふるいを使用し、さらに速度改善のために

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のみでも素数であるので、あなたは別に2の治療だけにして上から奇数を扱うことにより、素数をテストするか、作業を半減することができます。

関連する問題