2014-03-28 25 views
0

我應該寫一個函數來獲得兩個整數,函數通過獲得n位長的隨機(時間)整數來計算n位長的素數密度,並計算出多少他們是素數,輸出將是(cntprimes /次)。 我寫了我的代碼,但隨着導入隨機出現錯誤。 NameError:未定義全局名稱'random'。 請讓我知道我應該在我的代碼中修復哪些內容。素數的密度:

def is_prime(m): 
""" probabilistic test for compositeness of m>30 
adds a trivial sieve to quickly eliminate divisibility 
by small primes. """ 
if m in [2,3,5,7,11,13,17,19,23,29]: 
    return True # treats small primes separately 
for prime in [2,3,5,7,11,13,17,19,23,29]: 
    if m % prime == 0: 
     return False 
for i in range(0,100): 
    a = random.randint(1,m-1) # a is a random integer in [1..m-1] 
    if pow(a,m-1,m) != 1: 
      return False 
return True 



def density_primes(n, times=10000):    
    from random import getrandbits 
    cntprimes=0 
    for i in range(times): 
     global num 
     num=random.getrandbits(n) 

     if is_prime(num): 
      cntprimes+=1 

    density=cntprimes/times 
    return(density) 
+2

您需要在頂部輸入隨機數 – jonrsharpe

回答

5

這裏:

from random import getrandbits 
cntprimes=0 
for i in range(times): 
    global num 
    num=random.getrandbits(n) 

你可以這樣做:

import random   # bring 'random' into the current namespace 
random.getrandbits(n) # use it 

,或者你可以這樣做:

from random import getrandbits # bring 'getrandbits' into the current namespace 
getrandbits(n)     # use it 

,但你不能混用他們做到這一點:

from random import getrandbits # bring 'getrandbits' in 
random.getrandbits(n)    # try to use random, without bringing it in 

這就是你的代碼所做的。