首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python中Lucas-Lehmer测试的素Mersenne数

使用Python中Lucas-Lehmer测试的素Mersenne数
EN

Stack Overflow用户
提问于 2020-04-15 18:20:05
回答 1查看 169关注 0票数 0

我已经编写了下面的代码,用于使用Lucas-Lehmer测试验证总理Mersenen数的赋值。问题是,代码对素数15的罚款,如果我超过它,它就会继续运行。

代码语言:javascript
复制
def is_prime(number):
    if number <= 1:
        return False

    for factor in range(2, number):
        if number % factor == 0:
            return False

    return True


mersenne = []

for number in range (3, 20):
    if is_prime (number):
        mersenne.append (2**number - 1)

primes = []
for i in range (3,20):
    if is_prime (i):
        primes.append (i)

print (primes)


def lucas_lehmer(number):
        M = 2**number - 1
        s = 4
        for _ in range(number-2):
            s = (s*s - 2) % M
        return True

lucas = []
for number in mersenne:
    if is_prime (number):
        if lucas_lehmer (number):
            lucas.append (1)
    else:
        lucas.append (0)

print (lucas)

mercenne_primes = zip (primes, lucas)

print (list (mercenne_primes))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-20 05:14:19

您的代码通常是一塌糊涂。但是,您的主要问题是,lucas_lehmer()函数的最后一行是不正确的:

代码语言:javascript
复制
return True

这是一个测试,它不能总是返回True!最后一行应是:

代码语言:javascript
复制
return s == 0

下面是对您的代码的重写,以修复上述问题并将其清除:

代码语言:javascript
复制
def is_prime(number):
    if number <= 1:
        return False

    if number % 2 == 0:
        return number == 2

    for factor in range(3, int(number ** 0.5) + 1):
        if number % factor == 0:
            return False

    return True

def lucas_lehmer(prime):
    s = 4
    m = 2 ** prime - 1

    for _ in range(prime - 2):
        s = (s * s - 2) % m

    return s == 0

mersenne_primes = [number for number in range(3, 1500) if is_prime(number) and lucas_lehmer(number)]

print(*mersenne_primes)

输出的格式与原始版本不同,但这是一个简单的解决方法。这比代码高出100倍:

代码语言:javascript
复制
> python3 test.py
3 5 7 13 17 19 31 61 89 107 127 521 607 1279
>

但从高出200倍左右开始,它会明显变慢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61235864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档