2014-11-23 15 views
0

我試圖通過使用附加的代碼來支持素數定理。我想以某種方式顯示素數小於n之間的平均差距爲log(n)。我現在所擁有的代碼可以確定某個數字是否爲素數,然後第二部分計算出我的範圍內每個連續素數的素數差距。任何想法如何使用下面的代碼在Python中進行?素數定理Python

from pylab import * 

def Is_Prime (n): 
    if n==1: 
     return False 
    if n == 2 or n == 3: 
     return True 
    if n == 4: 
     return False 
    if n%2 == 0 or n%3 == 0: 
     return False 

    for i in range(5,int(n**0.5)+1,6): 
     if n%i == 0 or n%(i+2) == 0: 
      return False 

    return True 

k = 0 
for i in range (1,100): 
    if Is_Prime(i) == True: 
     print(i) 
     k+=1 
print "Total number of prime numbers in [1,100] is", k 


previous = 2 
n = 0 
for i in range(3,100000): 
    if Is_Prime(i): 
     n = n+1 
     current = i 
     gn = current - previous 
      print gn 
     plot(n,gn,'rs') 
     xlabel('n') 
     ylabel('g(n)') 
     previous = i 
     if n == 100: 
      break 

show() 
+0

什麼不正確? :) 如果你想加快主要列表的創建,請考慮使用Eratosthenes的篩代替:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes – 2014-11-23 17:20:04

+0

上面的代碼工作正常。我希望增加一些東西來找到平均的黃金差距,但我不知道如何。 – Sara20 2014-11-24 18:14:28

回答

0

我如何做到這一點(相對於當前的代碼),建議如下:

previous = 2 
n = 0 
for i in range(3,10000000): 
    if Is_Prime(i): 
     n = n+1 
     current = i 
     gn = current - previous 
     previous = i 
     if n % 1000 == 0: 
      print "Now at the gap between prime",n,"and prime",n+1 
      average_gap = (i-2)/float(n); 
      # (n+1)st prime is i, 1st prime is 2. n gaps. 
      # float(n) so that we get float, not int division! 
      print "Average gap so far:", average_gap 
      print "ln(p)/average_gap:", math.log(i)/average_gap 
     if n % 100000 == 0: 
      break 

注意,由第10000總理,我們只在1.1十歲上下的比例。 ..和第10萬個素數,我們仍然在1.0831。

它需要一個longgg時間去1.關閉這部分是因爲它實際上更緊密地跟隨Li(n)功能的reciprical:http://en.wikipedia.org/wiki/Logarithmic_integral_function( - 圍繞n間隙長度,大約是log(n) ...所以總質量低於n的密度更適合這個積分...但是對於大的nLi(n) ~ log(n),所以它工作)。

(見的http://en.wikipedia.org/wiki/Prime_number_theorem右邊的第一張圖 - 藍線代表你會得到比,紫色的線代表你開始使用數積分之比)

至於另一一邊,(而正如我在評論所說),它也將會是一個很多快看看用篩生成您的素數 - 如在這裏看到:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes ...

但上面的代碼工作(至少對於我來說)!無論如何,祝你未來精力充沛!