【发布时间】:2020-09-08 03:09:36
【问题描述】:
请帮忙解决这个问题;
对于具有指数 p 的给定梅森数,如果 Lucas-Lehmer 级数在位置 p - 2 处为 0,则该数是素数。编写一个函数来测试具有指数 p 的梅森数是否为素数。测试素数 p 在 3 到 65 之间的梅森数是否为素数。您的最终答案应该是由 (Mersenne exponent, 0) 或 (1) 组成的元组列表,用于您测试的每个 Mersenne 数,其中 0 和 1 分别替换“False”和“True”。下面显示的是我尝试的解决方案
#function to define a mersenne number
def mersenne_number(p):
return 2**p - 1
#function to generate the Lucas-Lehmer sequence
def lucas_lehmer(p):
ll_seq = [4]
if p > 2:
for i in range(1, (p - 2) + 1):
n_i = (ll_seq[i-1] ** 2 - 2)%(2**p - 1)
ll_seq.append(n_i)
return ll_seq
#To generate a list of Tuples consisting of (mersenne exponents, 1 or 0), 1 and 0 represent True and False respectively.
mersenne_primes = []
def ll_prime(num1, num2):
for p in range(3, 65):
if lucas_lehmer(p)[-1] == 0:
mersenne_primes.append((p, 1))
else:
mersenne_primes.append((p, 0))
print(mersenne_primes)
我在这个阶段得到了错误的输出。该函数返回的素数梅森指数不是素数,意思是 0。
【问题讨论】:
-
你已经问过这个问题了:Test for Primality of Mersenne Numbers