素数密度:

时间:2014-03-28 15:06:28

标签: python

我应该编写一个获得两个整数的函数,该函数通过获得n位长的随机(次数)整数计算n位长的素数密度,并找出它们中有多少是素数,输出将是(cntprimes / times)。 我已经编写了我的代码,但随机输入错误。 NameError:全局名称'随机'没有定义。 请告诉我在代码中应该修复的内容。

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)

1 个答案:

答案 0 :(得分: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

您的代码就是这样做的。