素数的密度:

0 投票
1 回答
509 浏览
提问于 2025-04-18 00:20

我需要写一个函数,这个函数接收两个整数。它的作用是计算有多少个n位长的质数。具体做法是随机生成一些n位长的整数,然后找出其中有多少个是质数,最后输出的结果是质数的数量除以生成的总数(cntprimes/times)。我写了代码,但在导入random模块时出现了错误。错误信息是:NameError: global name 'random' is not defined。请告诉我该如何修复我的代码。

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 个回答

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

这就是你的代码所做的事情。

撰写回答