我应该编写一个获得两个整数的函数,该函数通过获得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)
答案 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
您的代码就是这样做的。