素数的密度:
我需要写一个函数,这个函数接收两个整数。它的作用是计算有多少个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
这就是你的代码所做的事情。