梅森素数是q = 2 ^ p-1的那些数,其中p和q都是素数。编写一个带有参数n_max的mersenne_prime函数,并返回所有小于p_n_max的p的梅森素数q的列表。提示:应该有8个Mersenne质数,且p小于40。
我编写了以下代码,但对于我输入到mersenne_prime(x)中的任何值,它生成的唯一输出是3。>
def isprime(n): if n < 2: return False elif n == 2: return True else: if n % 2 == 0: return False for i in range(3,n,2): if n % i == 0: return False return True def mersenne_prime(n_max): for i in range(1,n_max,1): q = 2**i-1 if isprime(i) and isprime(q): print(q)
有人能够提供帮助以产生可生成梅森素数的工作代码吗?
编辑:将return函数更改为print可以适用于不同的输入值,但是在不同的系统中测试代码会产生错误消息。
Traceback (most recent call last):
File "/home/runner/unit_tests.py", line 134, in test_mersenne_prime
assert(len(mersenne_prime(4)) == len(correct_list)), \
TypeError: object of type 'NoneType' has no len()
梅森素数是q = 2 ^ p-1的那些数,其中p和q都是素数。编写一个函数mersenne_prime,该函数接受参数n_max并返回所有Mersenne素数q的列表,以减少p减...
计算梅森素数的更好方法是使用Lucas-Lehmer检验: